基于SOCKET开发文本服务器客户端文本传输程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、实验目的与实验要求
1、实验目的
使用c++6.0或c#,基于SOCKET开发一个简单的C/S文本传输程序2、实验要求
客户端能够发送由标准输入得到的文本,服务器能够接收并将其显示在标准输出上。
二、实验设备(环境)及要求
计算机系统:windows 8.1
软件环境:vc++6.0
三、实验内容与步骤
1、实验1
(1)实验内容
1、服务器端先初始化socket,并绑定端口,对端口进行监听,等待客户端的连接。
2、客户端初始化socket,连接服务器,并发送数据给服务器。
3、服务器接受客户端的数据,并返回回复信息。
(2)主要步骤
工作原理:
代码:
服务器
#include <stdio.h>
#include <winsock.h>
#pragma comment(lib,"ws2_32.lib")
int main()
{
//初始化
WORD sockVersion = MAKEWORD(2, 2);
WSADATA wsaData;
if (WSAStartup(sockVersion, &wsaData) != 0)
{
return 0;
}
//创建套接字
SOCKET slisten = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (slisten == INVALID_SOCKET)
{
printf("socket error !");
return 0;
}
//绑定IP和端口
sockaddr_in sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(55555);
sin.sin_addr.S_un.S_addr = INADDR_ANY;
if (bind(slisten, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR)
{
printf("bind error !");
return 0;
}
//开始监听
if (listen(slisten, 5) == SOCKET_ERROR)
{
printf("listen error !");
return 0;
}
SOCKET Client;
sockaddr_in remoteAddr;
int nAddrlen = sizeof(remoteAddr);
char revData[255];
printf(" 等待连接...\n");
Client = accept(slisten, (SOCKADDR *)&remoteAddr, &nAddrlen);
if (Client == INVALID_SOCKET)
{
printf("accept error !");
return 0;
}
printf("接受到一个连接:%s \r\n", inet_ntoa(remoteAddr.sin_addr));
//接收数据
while (1)
{
int ret = recv(Client, revData, 255, 0);
if (ret > 0)
{
revData[ret] = 0x00;
printf("来自客户端的信息:");
printf(revData);
printf("\n");
}
//发送确认信息
char * sendData = "发送成功。
\n\n";
send(Client, sendData, strlen(sendData), 0);
}
closesocket(slisten);
WSACleanup();
return 0;
}
客户端
#include <stdio.h>
#include <winsock2.h>
#pragma comment(lib,"ws2_32.lib")
int main()
{
WORD sockVersion = MAKEWORD(2, 2);
WSADATA data;
if (WSAStartup(sockVersion, &data) != 0)
{
return 0;
}
SOCKET sclient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sclient == INVALID_SOCKET)
{
printf("invalid socket !\n");
return 0;
}
sockaddr_in serAddr;
serAddr.sin_family = AF_INET;
serAddr.sin_port = htons(55555);
serAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
if (connect(sclient, (sockaddr *)&serAddr, sizeof(serAddr)) == SOCKET_ERROR) {
printf("connect error !\n");
closesocket(sclient);
return 0;
}
//发送和接收
printf("连接成功\n");
while(1)
{
char *sendData, *q;
sendData = (char*)malloc(sizeof(char) * 20); q = sendData;
printf("请输入需要传输的信息:");
scanf("%s", sendData, 20);
send(sclient, sendData, strlen(sendData), 0);
char recData[500];
int ret = recv(sclient, recData, 500, 0);
if (ret > 0)
{
recData[ret] = 0x00;
printf(recData);
}
}
closesocket(sclient);
WSACleanup();
return 0;
}
四:实验结果与分析
打开服务器,等待连接:
客服端连接后:
接收到客户端信息后等待再次接收信息
客户端成功链接至服务器,等待键入发送信息
客户端发送信息后收到的返回确认,等待再次输入信息
五:结论(讨论)
1、实验结论
本实验使用c++6.0,基于SOCKET开发一个简单的C/S文本传输程序。
2、讨论
该程序还可以加入更多的功能,比如 1.服务器可以同时连接几个客户端;2.服务器也可以选择发送数据。
六、教师评审
(注:文档可能无法思考全面,请浏览后下载,供参考。
可复制、编制,期待你的好评与关注!)。