《基于C 的简单的客户机服务器程序及结果.pdf》由会员分享,可在线阅读,更多相关《基于C 的简单的客户机服务器程序及结果.pdf(6页珍藏版)》请在金锄头文库上搜索。
1、服务器 #include #pragma comment(lib,Wsock32.lib) #include #include /服务器使用的端口号为 5050 #define DEFAULT_PORT 5050 void main( ) intiPort=DEFAULT_PORT; WSADATAwsaData; SOCKETsListen, sAccept; /客户地址长度 intiLen; /发送的数据长度 intiSend; /要发送给客户的信息 charbuf =Hello!I am 梅发同; /服务器和客户的地址 struct sockaddr_inser, cli; printf
2、(-n); printf(Server waitingn); printf(-n); if(WSAStartup(MAKEWORD(2,2), return; /创建服务器端套接口 sListen=socket(AF_INET,SOCK_STREAM,0); if(sListen=INVALID_SOCKET) printf(socket( )Failed:%dn, WSAGetLastError( ); return; /以下建立服务器端地址 ser.sin_family=AF_INET; /htons( )函数把一个双字节主机字节顺序的数转换为网络字 ser.sin_port=htons(
3、iPort); /htonl( )函数把一个四字节主机字节顺序的数转换为网 /使用系统指定的 IP 地址 INADDR_ANY ser.sin_addr.s_addr=htonl(INADDR_ANY); if(bind(sListen,(LPSOCKADDR) return; /进入监听状态 if(listen(sListen,5)=SOCKET_ERROR) printf(listen( ) Failed:%dn,WSAGetLastError( ); return; /初始化客户地址长度参数 iLen=sizeof(cli); /进入一个无限循环,等待客户的连接请求 while(1) s
4、Accept=accept(sListen,(struct sockaddr*) if(sAccept=INVALID_SOCKET) printf(accept( ) Failed: %dn, WSAGetLastError( ); break; /输出客户 IP 地址和端口号 printf(Accepted client IP:%s,port:%dn, inet_ntoa(cli.sin_addr), ntohs(cli.sin_port); /给连接的客户发送信息 iSend=send(sAccept,buf,sizeof(buf),0); if(iSend=SOCKET_ERROR)
5、printf(send( ) Failed.:%dn, WSAGetLastError( ); break; elseif(iSend=0) break; else printf(send( ) byte:%dn,iSend); printf(-n); closesocket(sAccept); closesocket(sListen); WSACleanup( ); 客户机 #include #include #pragma comment(lib,Wsock32.lib) /服务器端口号为 5050 #define DEFAULT_PORT 5050 #define DATA_BUFFER
6、1024 void main(int argc,char *argv ) WSADATAwsaData; SOCKETsClient; intiPort= DEFAULT_PORT; /从服务器端接收的数据长度 intiLen; /接收数据的缓冲 charbufDATA_BUFFER; /服务器端地址 struct sockaddr_inser; /判断输入的参数是否正确 if(argc2) /提示在命令行中输入服务器 IP 地址 /printf(Usage:client 172.16.0.218n); printf(Usage:client server IP addressn); /get
7、char(); return; /接收数据的缓冲区初始化 memset(buf,0,sizeof(buf); if(WSAStartup(MAKEWORD(2,2), return; /填写要连接的服务器地址信息 ser.sin_family=AF_INET; ser.sin_port=htons(iPort); /inet_addr( )函数将命令行的点分 IP 地址转化为用二进制表 示的网络字节顺序的 IP 地址 ser.sin_addr.s_addr=inet_addr(argv1); /建立客户端流式套接口 sClient=socket(AF_INET,SOCK_STREAM,0);
8、if(sClient=INVALID_SOCKET) printf(socket( ) Failed:%dn, WSAGetLastError( ); return; /请求与服务器端建立 TCP 连接 if(connect(sClient,(struct sockaddr*) return; else /从服务器端接收数据 iLen=recv(sClient,buf,sizeof(buf),0); if(iLen=0) return; else if(iLen=SOCKET_ERROR) printf(recv( ) Failed:%dn, WSAGetLastError( ); return; printf(recv( ) data from server:%sn,buf); closesocket(sClient); WSACleanup( ); 结果