第一范文网 - 专业文章范例文档资料分享平台

计算机网络实验指导书

来源:用户分享 时间:2025/5/19 0:20:31 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

nPort = atoi(argv[1]);//将端口号由“字符串”格式转换成“短整数”格式 //

//初始化通信接口winsocket

nRet = WSAStartup(wVersionRequested, &wsaData); if (wsaData.wVersion != wVersionRequested) { fprintf(stderr,\ return; } //

// Do the stuff a stream server does //

StreamServer(nPort); //

// Release WinSock

///去初始化通信接口winsocket

WSACleanup(); }

////////////////////////////////////////////////////////////

void StreamServer(short nPort) { // // Create a TCP/IP stream socket to \ SOCKET listenSocket;//定义侦听套接字 listenSocket = socket(AF_INET, // Address family SOCK_STREAM, // Socket type IPPROTO_TCP); // Protocol if (listenSocket == INVALID_SOCKET) { PRINTERROR(\ return; } // // Fill in the address structure SOCKADDR_IN saServer; //初始化本地套接字地址 saServer.sin_family = AF_INET; saServer.sin_addr.s_addr = INADDR_ANY; // Let WinSock supply address saServer.sin_port = htons(nPort); // Use port from command line //

41

// bind the name to the socket // int nRet; nRet = bind(listenSocket, // Socket (LPSOCKADDR)&saServer, // Our address sizeof(struct sockaddr)); // Size of address structure if (nRet == SOCKET_ERROR) { PRINTERROR(\ closesocket(listenSocket); return; } // // This isn't normally done or required, but in this // example we're printing out where the server is waiting // so that you can connect the example client. // int nLen; nLen = sizeof(SOCKADDR); char szBuf[256]; nRet = gethostname(szBuf, sizeof(szBuf)); //获取本地主机名 if (nRet == SOCKET_ERROR) { PRINTERROR(\ closesocket(listenSocket); return; } // Show the server name and port number printf(\ szBuf, nPort); // Set the socket to listen printf(\

//在套接字listenSocket上进行侦听(来自客户端的连接请求) nRet = listen(listenSocket, // Bound socket SOMAXCONN); // Number of connection request queue if (nRet == SOCKET_ERROR) { PRINTERROR(\ closesocket(listenSocket);

42

}

return;

//

// Wait for an incoming request //

SOCKET remoteSocket;

printf(\

remoteSocket = accept(listenSocket, // Listening socket NULL, // Optional client address NULL); //创建一个新的套接字,实现与客户端的tcp连接 if (remoteSocket == INVALID_SOCKET) { PRINTERROR(\ closesocket(listenSocket); return; }

//

// We're connected to a client

// New socket descriptor returned already // has clients address

//

// Receive data from the client //

memset(szBuf, 0, sizeof(szBuf)); //将接收缓冲区“清零” nRet = recv(remoteSocket, // Connected client szBuf, // Receive buffer sizeof(szBuf), // Lenght of buffer 0); // Flags if (nRet == INVALID_SOCKET) { PRINTERROR(\ closesocket(listenSocket); closesocket(remoteSocket); return; }

//

// Display received data //

printf(\

43

}

//

// Send data back to the client //

strcpy(szBuf, \nRet = send(remoteSocket, szBuf, strlen(szBuf)+1, 0);

// Connected socket // Data buffer // Lenght of data // Flags

//

// Close BOTH sockets before exiting //

closesocket(remoteSocket);//关闭套接字 closesocket(listenSocket); //关闭套接字 return;

(二)客户端程序:client.cpp

// Compile and link with wsock32.lib

// Pass the server name and port number on the command line. // Example: Client MyMachineName 2000 //

#include #include

#pragma comment(lib,\

// Function prototype

void StreamClient(char *szServer, short nPort);

// Helper macro for displaying errors #define PRINTERROR(s) \\ fprintf(stderr,\

////////////////////////////////////////////////////////////

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

WORD wVersionRequested = MAKEWORD(1,1); WSADATA wsaData; int nRet; short nPort;

44

搜索更多关于: 计算机网络实验指导书 的文档
计算机网络实验指导书.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c1a43t7rt1w6x2111f20r4n7xz5eecp00bhf_11.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top