本文展示了服务端和客户端进行网络通信的示例:服务端向客户端发送数据,客户端读取服务端发送过来的数据;废话不多说,直接上代码!
服务端代码:
#include <sys/socket.h>
#include <cstdlib>
#include <unistd.h>
#include <cstdio>
#include <sys/types.h>
#include <arpa/inet.h>
int main()
{//Step01:Create a socketint fd_monitor = socket(AF_INET,SOCK_STREAM,0);if(fd_monitor==-1){printf("Failed to create file descriptor!\n");return -1;}//Step02;Set ip address and port for current processingsockaddr_in myaddr;myaddr.sin_family = AF_INET;myaddr.sin_addr.s_addr = INADDR_ANY;myaddr.sin_port = htons(8888);int iResBind = bind(fd_monitor,(sockaddr*)&myaddr,sizeof(myaddr));if(iResBind==-1){printf("Failed to bind!\n");return -2;}//Step03:Listen connectionint iResListen = listen(fd_monitor,128);if(iResListen==-1){printf("Failed to listen!\n");return -3;}//Step04:Wait connection from clientint fd_communication = accept(fd_monitor,NULL,NULL);if(fd_communication < 0){printf("Failed to accept!\n");return -4;}//Step05:Write data to clientchar buffer[1024];while(1){sprintf(buffer,"Hello! I am server!\n");write(fd_communication,buffer,sizeof(buffer));sleep(3);}//Step06:Close communication file descriptorclose(fd_communication);return 0;}
客户端代码:
#include <cstdlib>
#include <unistd.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <cstdio>
#include <cstring>
#define SERVER_IP "127.0.0.1"
#define SERVER_PORT 8888int main()
{//Step01:Create socketint fd_communication = socket(AF_INET,SOCK_STREAM,0);if(fd_communication==-1){printf("Failed to create socket!\n");return -1;}//Step02:Connect serversockaddr_in addr;addr.sin_family = AF_INET;addr.sin_port =htons(SERVER_PORT);inet_pton(AF_LOCAL,SERVER_IP,&addr.sin_addr.s_addr);int iResConnect = connect(fd_communication,(sockaddr*)&addr,sizeof(addr));if(iResConnect==-1){printf("Failed to connect server\n");return -2;}//Step03:Communicate with serverchar buffer[1024];while(1){memset(buffer,0,sizeof(buffer));int iLen = read(fd_communication,buffer,sizeof(buffer));printf("recv data:%s\n",buffer);sleep(1);}close(fd_communication);return 0;
}
需要说明的是:服务端创立的套接字对象需要绑定ip地址和端口号;客户端connect服务端的时候需要提供服务端的ip地址和端口号(服务端提供服务的进程的端口号)