200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > Windows下C语言的Socket编程例子(TCP和UDP)

Windows下C语言的Socket编程例子(TCP和UDP)

时间:2020-02-05 07:10:10

相关推荐

Windows下C语言的Socket编程例子(TCP和UDP)

首先是TCP

server端:[cpp]view plaincopy #include"stdafx.h"#include<stdio.h>#include<winsock2.h>#pragmacomment(lib,"ws2_32.lib")intmain(intargc,char*argv[]){//初始化WSAWORDsockVersion=MAKEWORD(2,2);WSADATAwsaData;if(WSAStartup(sockVersion,&wsaData)!=0){return0;}//创建套接字SOCKETslisten=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);if(slisten==INVALID_SOCKET){printf("socketerror!");return0;}//绑定IP和端口sockaddr_insin;sin.sin_family=AF_INET;sin.sin_port=htons(8888);sin.sin_addr.S_un.S_addr=INADDR_ANY;if(bind(slisten,(LPSOCKADDR)&sin,sizeof(sin))==SOCKET_ERROR){printf("binderror!");}//开始监听if(listen(slisten,5)==SOCKET_ERROR){printf("listenerror!");return0;}//循环接收数据SOCKETsClient;sockaddr_inremoteAddr;intnAddrlen=sizeof(remoteAddr);charrevData[255];while(true){printf("等待连接...\n");sClient=accept(slisten,(SOCKADDR*)&remoteAddr,&nAddrlen);if(sClient==INVALID_SOCKET){printf("accepterror!");continue;}printf("接受到一个连接:%s\r\n",inet_ntoa(remoteAddr.sin_addr));//接收数据intret=recv(sClient,revData,255,0);if(ret>0){revData[ret]=0x00;printf(revData);}//发送数据char*sendData="你好,TCP客户端!\n";send(sClient,sendData,strlen(sendData),0);closesocket(sClient);}closesocket(slisten);WSACleanup();return0;}

client端:[cpp]view plaincopy #include"stdafx.h"#include<WINSOCK2.H>#include<STDIO.H>#pragmacomment(lib,"ws2_32.lib")intmain(intargc,char*argv[]){WORDsockVersion=MAKEWORD(2,2);WSADATAdata;if(WSAStartup(sockVersion,&data)!=0){return0;}SOCKETsclient=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);if(sclient==INVALID_SOCKET){printf("invalidsocket!");return0;}sockaddr_inserAddr;serAddr.sin_family=AF_INET;serAddr.sin_port=htons(8888);serAddr.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");if(connect(sclient,(sockaddr*)&serAddr,sizeof(serAddr))==SOCKET_ERROR){printf("connecterror!");closesocket(sclient);return0;}char*sendData="你好,TCP服务端,我是客户端!\n";send(sclient,sendData,strlen(sendData),0);charrecData[255];intret=recv(sclient,recData,255,0);if(ret>0){recData[ret]=0x00;printf(recData);}closesocket(sclient);WSACleanup();return0;}

然后是UDP

server端:[cpp]view plaincopy #include"stdafx.h"#include<stdio.h>#include<winsock2.h>#pragmacomment(lib,"ws2_32.lib")intmain(intargc,char*argv[]){WSADATAwsaData;WORDsockVersion=MAKEWORD(2,2);if(WSAStartup(sockVersion,&wsaData)!=0){return0;}SOCKETserSocket=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);if(serSocket==INVALID_SOCKET){printf("socketerror!");return0;}sockaddr_inserAddr;serAddr.sin_family=AF_INET;serAddr.sin_port=htons(8888);serAddr.sin_addr.S_un.S_addr=INADDR_ANY;if(bind(serSocket,(sockaddr*)&serAddr,sizeof(serAddr))==SOCKET_ERROR){printf("binderror!");closesocket(serSocket);return0;}sockaddr_inremoteAddr;intnAddrLen=sizeof(remoteAddr);while(true){charrecvData[255];intret=recvfrom(serSocket,recvData,255,0,(sockaddr*)&remoteAddr,&nAddrLen);if(ret>0){recvData[ret]=0x00;printf("接受到一个连接:%s\r\n",inet_ntoa(remoteAddr.sin_addr));printf(recvData);}char*sendData="一个来自服务端的UDP数据包\n";sendto(serSocket,sendData,strlen(sendData),0,(sockaddr*)&remoteAddr,nAddrLen);}closesocket(serSocket);WSACleanup();return0;} client端:[cpp]view plaincopy #include"stdafx.h"#include<stdio.h>#include<winsock2.h>#pragmacomment(lib,"ws2_32.lib")intmain(intargc,char*argv[]){WORDsocketVersion=MAKEWORD(2,2);WSADATAwsaData;if(WSAStartup(socketVersion,&wsaData)!=0){return0;}SOCKETsclient=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);sockaddr_insin;sin.sin_family=AF_INET;sin.sin_port=htons(8888);sin.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");intlen=sizeof(sin);char*sendData="来自客户端的数据包.\n";sendto(sclient,sendData,strlen(sendData),0,(sockaddr*)&sin,len);charrecvData[255];intret=recvfrom(sclient,recvData,255,0,(sockaddr*)&sin,&len);if(ret>0){recvData[ret]=0x00;printf(recvData);}closesocket(sclient);WSACleanup();return0;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。