实验1 网络协议分析与仿真(7)

2019-05-27 20:43

计算机网络协议仿真实验

(LPSOCKADDR)&saServer, // 服务员地址 sizeof(struct sockaddr) //地址长度 );

/*错误处理*/

if (nRet == SOCKET_ERROR) {

PRINTERROR(\ closesocket(theSocket); return; }

/* 等待来自客户端的数据*/

SOCKADDR_IN saClient; char szBuf[1024]; int nLen;

while(1) {

/*准备接收数据*/

memset(szBuf, 0, sizeof(szBuf)); nRet = recvfrom(theSocket, szBuf, sizeof(szBuf), 0,

// 已绑定的socket // 接收缓冲区 // 缓冲区大小 // Flags

(LPSOCKADDR)&saClient, // 接收客户端地址的缓冲区 &nLen); // 地址缓冲区的长度

/*打印接收到的信息*/

printf(\

/* 发送数据给客户端*/

strcpy(szBuf, \

sendto(theSocket,

// 已绑定的socket

计算机网络协议仿真实验

szBuf, strlen(szBuf), 0, // 发送缓冲区

// 发送数据的长度 // Flags

(LPSOCKADDR)&saClient, // 目的地址 nLen); // 地址长度 }

closesocket(theSocket);

return; }

//////////////////////////////////////////////////////////// //数据报服务员端主程序 //

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

void main() {

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

nPort = SERV_UDP_PORT;

/* 初始化Winsock*/

nRet = WSAStartup(wVersionRequested, &wsaData); if (wsaData.wVersion != wVersionRequested) {

fprintf(stderr,\ return; }

/*调用数据服务员子程序*/ DatagramServer(nPort);

/*结束WinSock*/

计算机网络协议仿真实验

WSACleanup(); }

请学生认真阅读分析上述服务员程序,然后根据实验原理二中介绍的内容,自行编写相应的无连接的客户端程序并运行。从而实现客户和服务器间的数据传输。 。

在仿真机一端运行客户端进程,在监控机端捕获数据并进行分析。

练习二:使用TCP协议的面向连接的客户-服务员程序设计。

根据实验原理中介绍的内容,设计一个面向连接的客户-服务员系统,实现二者之间的数据传递。

下面是一个简单的TCP客户-服务员程序的服务员程序: 面向连接的服务员程序:

#include #include #include #include #include #include #include #include

#define SERV_TCP_PORT 6000 /*服务员进程端口号,视具体情况而定*/ #define SERV_HOST_ADDR \服务员IP,视具体情况而定*/ int sockfd;

/////////////////////////////////////////////////////////////// //线程用来处理客户端的请求 // //服务员主进程每与某客户端建立一个连接之后,便启动一个新的线程来处理接下// //客户端的请求,参数为服务员与该客户端的连接点:socket // //////////////////////////////////////////////////////////////

DWORD ClientThread(void *pVoid) {

int nRet;

char szBuf[1024];

memset(szBuf, 0, sizeof(szBuf));

计算机网络协议仿真实验

/*接收来自客户端的数据信息*/

nRet = recv((SOCKET )pVoid, szBuf, sizeof(szBuf), 0);

//与客户端连接的socket // 接收缓冲区 // 缓冲区长度 // Flags

/*错误处理*/

if (nRet == INVALID_SOCKET) {

printf(\ closesocket(sockfd);

closesocket((SOCKET)pVoid); return 0; }

/*显示接收到的数据*/

printf(\

/* 发送数据给客户端*/

strcpy(szBuf, \发送内容 nRet = send((SOCKET)pVoid, //与客户端连接的socket szBuf, // 数据缓冲区 strlen(szBuf), // 数据长度 0); // Flags

/*结束连接,释放socket*/

closesocket((SOCKET)pVoid);

return 0; }

////////////////////////////////////////////////////////////// //服务员主程序: // //在一个众所周知的端口上等待客户的连接请求 // //有请求到来时建立与客户端的连接,并启动一个线程处理该请求 //

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

int main()

计算机网络协议仿真实验

{

int clilen; int pHandle=-1;

struct sockaddr_in serv_addr; SOCKET socketClient; DWORD ThreadAddr; HANDLE dwClientThread; SOCKADDR_IN SockAddr;

/*初始化Winsock API,即连接Winsock库*/

WORD wVersionRequested = MAKEWORD(1, 1); WSADATA wsaData;

if (WSAStartup(wVersionRequested, &wsaData)) {

printf(\ return -1; }

/*打开一个TCP SOCKET */

if((sockfd=socket(AF_INET, SOCK_STREAM,0))<0) printf(\

/*绑定本地地址,以便客户端连接*/

memset((char *)&serv_addr,0,sizeof(struct sockaddr_in)); serv_addr.sin_family=AF_INET;

serv_addr.sin_addr.s_addr=htonl(INADDR_ANY); serv_addr.sin_port=htons(SERV_TCP_PORT);

if (bind(sockfd,(struct sockaddr *)(& serv_addr), sizeof (serv_addr) )<0)

printf(\

/*设置服务员的最大连接数为15*/ listen(sockfd,5);

/*循环等待来自客户端的连接请求*/ while(1) {

/*阻塞等待一个请求的到来*/


实验1 网络协议分析与仿真(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:关于中西方绘画差异

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: