好文档 - 专业文书写作范文服务资料分享网站

Socket编程利用TCP协议的实验报告

天下 分享 时间: 加入收藏 我要投稿 点赞

Socket编程报告(TCP/IP协议)

一.实验目的

通过C++来实现TCP/IP协议下的Socket编程,掌握TCP协议的算法实现。

二.实验原理

客户端 建立Socket,通过端口号和地址确定目标服务器,使用Connect连接到服务器,send发送消息,等待处理,通信完成后调用CloseSocket关闭Socket

服务端 建立Socket,声明自身的端口号和地址并绑定到Socket,使用Listen打开监听,然后不断用Accept去查看是否有连接,如果有,捕获Socket,并通过Recv获取消息的内容,通信完成后调用CloseSocket关闭这个对应Accept到的Socket,如果不再需要等待任何客户端连接,那么用CloseSocket关闭掉自身的Socket

三.实验代码(C++实现)

服务器端代码如下:

#pragma once #include #include

#pragma comment (lib,\class CServerNet { public:

//初始化服务器,返回0表示成功

int Init(const char* address,int port);

//更新数据

void Run();

private: };

int CServerNet::Init( const char* address,int port ) {

int rlt = 0; SOCKET m_sock;

//用于记录错误信息,并输出

int iErrorMsg;

//初始化WinSock

if (iErrorMsg != NO_ERROR) {

WSAData wsaData;

iErrorMsg = WSAStartup(MAKEWORD(1,1),&wsaData);

//初始化WinSock失败

printf(\

rlt = 1;

//创建服务端Socket

m_sock = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); if (m_sock == INVALID_SOCKET) }

return rlt;

{

//创建Socket异常

printf(\

rlt = 2;

//绑定

iErrorMsg = bind(m_sock,(sockaddr*)&serverAddr,sizeof(serverAddr)); if (iErrorMsg < 0) { }

//绑定失败

printf(\rlt = 3; return rlt; //声明信息

sockaddr_in serverAddr;

serverAddr.sin_family = AF_INET; serverAddr.sin_port = port;

serverAddr.sin_addr.s_addr = inet_addr(address); }

return rlt;

return rlt; }

void CServerNet::Run() {

sockaddr_in tcpAddr; int len = sizeof(sockaddr); SOCKET newSocket; char buf[1024]; int rval; //公开连接 listen(m_sock,5);

do {

//接收信息

newSocket = accept(m_sock,(sockaddr*)&tcpAddr,&len);

if (newSocket == INVALID_SOCKET)

{

//非可用socket

} else

{

//新socket连接

printf(\ //消息处理

if (rval == 0)

}

//关闭对应Accept的socket closesocket(newSocket);

}while(rval != 0);

else

//显示接收到的数据 printf(\//recv返回0表示正常退出 printf(\

if (rval == SOCKET_ERROR)

//这应该是个异常,当客户端没有调用closeSocket就直接退出游戏的时候,将会进入这里 printf(\

do {

printf(\//接收数据

memset(buf,0,sizeof(buf)); rval = recv(newSocket,buf,1024,0);

} while (1); }

//关闭自身的Socket closesocket(m_sock);

int main(int argc, char **argv) {

CServerNet serverNet;

int iRlt = serverNet.Init(\if (iRlt == 0) {

}

} else

printf(\serverNet.Run();

printf(\

system(\

客户端代码如下:

#pragma once #include #include

#pragma comment(lib, \class CClientNet { public: private: };

int CClientNet::Connect( int port,const char* address ) {

//用于记录错误信息并输出 int iErrMsg; //启动WinSock WSAData wsaData;

iErrMsg = WSAStartup(MAKEWORD(1,1),&wsaData); if (iErrMsg != NO_ERROR) {

printf(\//有错误 int rlt = 0; SOCKET m_sock; //连接上指定服务器

int Connect(int port,const char* address); //发送信息

int SendMsg(const char* msg,int len); //关闭 void Close();

Socket编程利用TCP协议的实验报告

Socket编程报告(TCP/IP协议)一.实验目的通过C++来实现TCP/IP协议下的Socket
推荐度:
点击下载文档文档为doc格式
13u0y17wa05o77l3183e
领取福利

微信扫码领取福利

微信扫码分享