c++网络编程(一)TCP/UDP入门级客户端与服务端交互代码
1,在这里为什么要讨论Linux上的文件操作呢?因为Linux上,socket操作与文件操作没有区别,在Linux上,socket也被认为是文件的一种。注:Linux上的C语言编译器–GCC,具体使用就不在这里讲了。
3,Linux上的文件或套接字操作:打开文件:
intopen(constchar*path,intflag);–>(Linux上对应socket(…)函数)
关闭文件或套接字:
intclose(intfd);–>(Windows上对应closesocket(SOCKETS)函数)
将数据写入文件或传递数据:
ssize_twrite(intfd,constvoid*buf,size_tnbytes);
读取文件中数据或接收数据:
ssize_tread(intfd,void*buf,size_tnbytes);
1,Windows套接字大部分是参考BSD系列UNIX套接字设计的,所以很多地方都跟Linux套接字类似。因此,只需要更改Linux环境下编好的一部分网络程序内容,就能再Windows平台下运行。
2,上面讲了Linux上,文件操作和套接字操作一致。但Windows上的I/O函数和套接字I/O函数是不同的。Winsock数据传输函数:
intsend(SOCKETs,constchar*buf,intlen,intflags);
Winsock数据接收函数:
intrecv(SOCKETs,constchar*buf,intlen,intflags);
Winsock库初始化:
intmain(intargc,char*argv[]){WSADATAwsaData;...if(WSAStartup(MAKEWORD(1,2),&wsaData)!=0)ErrorHandling("WSAStartup()error!");...return0;}在退出时需要释放Winsock库:
intWSACleanup(void);//返回0成功,失败返回SOCKET_ERROR
代码:
windows下:
TCP:
一.服务端代码
二.客户端代码
#define_WINSOCK_DEPRECATED_NO_WARNINGS#include#include#pragmacomment(lib,"ws2_32.lib")voidmain(){//加载套接字WSADATAwsaData;charbuff[1024];memset(buff,0,sizeof(buff));if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0){printf("FailedtoloadWinsock");return;}SOCKADDR_INaddrSrv;addrSrv.sin_family=AF_INET;addrSrv.sin_port=htons(5099);addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");//创建套接字SOCKETsockClient=socket(AF_INET,SOCK_STREAM,0);if(SOCKET_ERROR==sockClient){printf("Socket()error:%d",WSAGetLastError());return;}//向服务器发出连接请求if(connect(sockClient,(structsockaddr*)&addrSrv,sizeof(addrSrv))==INVALID_SOCKET){printf("Connectfailed:%d",WSAGetLastError());return;}else{//接收数据recv(sockClient,buff,sizeof(buff),0);printf("%s\n",buff);}//发送数据char*buffSend="hello,thisisaClient....";send(sockClient,buffSend,strlen(buffSend)+1,0);printf("%d",strlen(buffSend)+1);//关闭套接字closesocket(sockClient);WSACleanup();system("pause");}
怕某些小白不懂我详细说说运行,运行时先开服务端,在开客户端运行,也就是开两个cPP文件分别运行,两个cpp各是一个小项目代码不要放在一起
这里的127.0.0.1是代表本地的地址,你们想实现两机交互就用对方的地址。
代码很简单,想要直接拿去,接下来直接看运行结果:
UDP:
windows下UDP服务端代码
windows下UDP客户端端代码
注:以下代码需在LINUX下运行gcc什么的都可以
LINUX下:
一.TCP
linux下TCP服务端代码:
linux下TCP客户端代码:
二.UDP
linux下UDP服务端代码
linux下UDP客户端代码
#include#include#include#include#includeintmain(intargc,char*argv[]){intclient_sockfd;intlen;structsockaddr_inremote_addr;//服务器端网络地址结构体intsin_size;charbuf[BUFSIZ];//数据传送的缓冲区memset(&remote_addr,0,sizeof(remote_addr));//数据初始化--清零remote_addr.sin_family=AF_INET;//设置为IP通信remote_addr.sin_addr.s_addr=inet_addr("127.0.0.1");//服务器IP地址remote_addr.sin_port=htons(8000);//服务器端口号/*创建客户端套接字--IPv4协议,面向无连接通信,UDP协议*/if((client_sockfd=socket(PF_INET,SOCK_DGRAM,0))<0){perror("socketerror");return1;}strcpy(buf,"Thisisatestmessage");//发送的内容printf("sending:'%s'/n",buf);sin_size=sizeof(structsockaddr_in);/*向服务器发送数据包*/if((len=sendto(client_sockfd,buf,strlen(buf),0,(structsockaddr*)&remote_addr,sizeof(structsockaddr)))<0){perror("recvfrom");return1;}/*关闭套接字*/close(client_sockfd);return0;}