简单tcp通信

来源:互联网 发布:linux上部署jenkins 编辑:程序博客网 时间:2024/05/14 14:22


server:

//服务端功能  只要有客户请求连接  在连接成功后,服务器向请求连接的客户发送"Hello!I am a server!"的信息。如果发送正确 显示所发送的字节数。//客户端的功能是  向服务器发出连接请求 在连接成功后,接收并显示从服务器收到的消息//通过面向连接的tcp协议实现#include<Winsock2.h>#include<stdio.h>#include<stdlib.h>#pragma comment(lib,"ws2_32.lib")#define DEFAULT_PORT 5050void main(){int iport=DEFAULT_PORT;WSADATA wsaData;SOCKET sListen,sAccept;int iLen;int iSend;char buf[]="I am a server !.";struct sockaddr_in ser,cli;printf("-----------------------\n");printf("server waiting \n");printf("-----------------------\n");///启动if(WSAStartup(MAKEWORD(2,2),&wsaData))//检查协议栈 获得ws细节{printf("Failed to load Winsock.\n");return  ;}//建立socketsListen=socket(AF_INET,SOCK_STREAM,0);//建立socketif(sListen==INVALID_SOCKET){printf("socket()Failed:%d\n",WSAGetLastError());return  ;}//建立服务器地址   ser  sockaddr_in类型ser.sin_family=AF_INET;ser.sin_port=htons(iport);//host to shortser.sin_addr.s_addr=htonl(INADDR_ANY);//host to long if(bind(sListen,(LPSOCKADDR)&ser,sizeof(ser))==SOCKET_ERROR)//将socket和 端口和地址 绑定在一起  {printf("bind()Failed:%d\n",WSAGetLastError());return  ;}if(listen(sListen,5)==SOCKET_ERROR)//添加监听{printf("listen()Faild:%d\n",WSAGetLastError());return  ;}iLen=sizeof(cli);while(1){sAccept=accept(sListen,(struct sockaddr*)&cli,&iLen);//接收信息   cli 用来存放接收的 IP地址等信息  sockaddr_in   同时返回生成一个客户端socketif(sAccept==INVALID_SOCKET){printf("accept()Faild:%d \n",WSAGetLastError());break;}printf("Accepted client IP:[%s],port:[%d]\n",inet_ntoa(cli.sin_addr),ntohs(cli.sin_port));iSend=send(sAccept,buf,sizeof(buf),0);//发送信息 if(iSend==SOCKET_ERROR){printf("send()Faild:%d\n",WSAGetLastError());break;}else if(iSend==0) break;else{printf("send()byte:%d\n",iSend);printf("----------------------\n");}closesocket(sAccept);}closesocket(sListen);WSACleanup();return  ;}



client:


//服务端功能  只要有客户请求连接  在连接成功后,服务器向请求连接的客户发送"Hello!I am a server!"的信息。如果发送正确 显示所发送的字节数。//客户端的功能是  向服务器发出连接请求 在连接成功后,接收并显示从服务器收到的消息//通过面向连接的tcp协议实现#include<Winsock2.h>#include<stdio.h>#include<stdlib.h>#pragma comment(lib,"ws2_32.lib")#define DEFAULT_PORT 5050#define DATA_BUFFER 1024void main(int argc,char *argv[]){WSADATA wsaData;SOCKET sClient;int iPort=DEFAULT_PORT;int iLen;char buf[DATA_BUFFER];struct sockaddr_in ser;if(argc<2){printf("Usage:client[server IP address]\n");return;}memset(buf,0,sizeof(buf));if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0)//检查协议栈 {printf("Failed to load Winsock.\n");return;}ser.sin_family=AF_INET;ser.sin_port=htons(iPort);ser.sin_addr.s_addr=inet_addr(argv[1]);sClient=socket(AF_INET,SOCK_STREAM,0);//建立客户端socketif(sClient==INVALID_SOCKET){printf("socket()Failed:%d\n",WSAGetLastError());return;}if(connect(sClient,(struct sockaddr*)&ser,sizeof(ser))==INVALID_SOCKET)//将sClient同目标 地址连接  同时返回一个socket{printf("Connect()Failed:%d\n",WSAGetLastError());return;}else{iLen=recv(sClient,buf,sizeof(buf),0);//从sClient接收if(iLen==0)return;else if(iLen==SOCKET_ERROR){printf("recv()Faild:%d\n",WSAGetLastError());return;}printf("recv() data from server:  %s\n",buf);}closesocket(sClient);WSACleanup();}




0 0
原创粉丝点击