手机网站开发 图库类,网站模板 div,seo岗位要求,自己开网店怎么运营Socket 编程是一种用于在网络上进行通信的编程方法#xff0c;以下代码可以实现在不同主机之间传输数据。
Socket 编程中服务器端和客户端的基本步骤#xff1a;服务器端步骤#xff1a;
1.创建 Socket#xff1a;
int serverSocket socket(AF_INET, SOCK_STREAM, 0);… Socket 编程是一种用于在网络上进行通信的编程方法以下代码可以实现在不同主机之间传输数据。
Socket 编程中服务器端和客户端的基本步骤服务器端步骤
1.创建 Socket
int serverSocket socket(AF_INET, SOCK_STREAM, 0); 使用 socket 函数创建一个套接字。AF_INET 表示使用 IPv4 地址族。SOCK_STREAM 表示使用 TCP 协议如果使用 UDP则为 SOCK_DGRAM。 2.绑定地址和端口 struct sockaddr_in serverAddress;serverAddress.sin_family AF_INET;serverAddress.sin_addr.s_addr INADDR_ANY;serverAddress.sin_port htons(PORT);bind(serverSocket, (struct sockaddr*)amp;serverAddress, sizeof(serverAddress)); 初始化服务器地址结构体 sockaddr_in设置 IP 地址和端口。使用 bind 函数将套接字绑定到指定的地址和端口。 3.监听连接请求 listen(serverSocket, BACKLOG); 使用 listen 函数开始监听连接请求。BACKLOG 参数指定连接请求队列的最大长度。 4.接受客户端连接 int clientSocket accept(serverSocket, NULL, NULL); 使用 accept 函数接受客户端的连接请求。返回一个新的套接字 clientSocket用于与客户端通信。 5.接收和发送数据 使用 recv 函数从客户端接收数据使用 send 函数向客户端发送数据。 关闭连接 close(clientSocket);close(serverSocket); 使用 close 函数关闭连接的套接字。
客户端步骤
1. 创建 Socket int clientSocket socket(AF_INET, SOCK_STREAM, 0);
使用 socket 函数创建一个套接字。设置服务器地址和端口 struct sockaddr_in serverAddress;serverAddress.sin_family AF_INET;serverAddress.sin_addr.s_addr inet_addr(SERVER_IP);serverAddress.sin_port htons(PORT); 初始化服务器地址结构体 sockaddr_in设置服务器的 IP 地址和端口。连接到服务器 connect(clientSocket, (struct sockaddr*)amp;serverAddress, sizeof(serverAddress));
使用 connect 函数连接到服务器。发送和接收数据使用 send 函数向服务器发送数据使用 recv 函数从服务器接收数据。关闭连接 close(clientSocket);
使用 close 函数关闭连接的套接字。
解决分包、粘包问题
Socket实现模拟TCP通信粘包问题-CSDN博客
Client
#include iostream
#include string
#include cstring
#include sys/socket.h
#include arpa/inet.h
#include unistd.hint main(){//1.创建socketint client_socksocket(AF_INET,SOCK_STREAM,0);if (client_sock-1){std::cerrFaild to create socketstd::endl;return -1;}//2.连接服务器struct sockaddr_in server_addr;server_addr.sin_familyAF_INET;//server_addr.sin_addr.s_addrinet_addr(127.0.0.1);inet_pton(AF_INET,127.0.0.1,server_addr.sin_addr.s_addr);server_addr.sin_porthtons(9999);if(connect(client_sock,(struct sockaddr*)server_addr,sizeof(server_addr))-1){std::cerrFaild to connect socketstd::endl;return -1;}std::coutConnected to serverstd::endl;//3.数据交互//发送消息std::string msgHello server!\n;if(write(client_sock,msg.c_str(),msg.length())-1){std::cerrFaild to write std::endl;return -1;}//接受消息char buffer[1024];if(read(client_sock,buffer,sizeof(buffer))-1){std::cerrFaild to readstd::endl;return -1;}printf(Receive to server :%s,buffer);close(client_sock);}
Server
#include iostream
#include sys/socket.h
#include netinet/in.h
#include arpa/inet.h
#include unistd.h
#include cstringint main(int, char**){//1.创建套接字int listen_socksocket(AF_INET,SOCK_STREAM,0);if (listen_sock-1){std::cerrFiald to create socketstd::endl;return 1;}//2.绑定IP地址struct sockaddr_in server_addr;memset(server_addr,0,sizeof(server_addr));server_addr.sin_addr.s_addrINADDR_ANY;server_addr.sin_familyAF_INET;server_addr.sin_porthtons(9999);if(bind(listen_sock,(struct sockaddr*)server_addr,sizeof(server_addr))-1){std::cerrFiald to bind socketstd::endl;return 1;}//3.监听套接字if (listen(listen_sock,5)-1){std::cerrFiald to listen socketstd::endl;return 1;}std::coutserver is listeningstd::endl;//4.接受客户端的连接struct sockaddr_in client_addr;socklen_t client_addr_lensizeof(client_addr);int client_sockaccept(listen_sock,(struct sockaddr*)client_addr,client_addr_len);if (client_sock-1){std::cerrFiald to accept socketstd::endl;return 1;}std::couta client connectedstd::endl;//5.数据交互//接受消息char buffer[1024];int read_sizeread(client_sock,buffer,sizeof(buffer));if (read_size-1) {std::cerrFiald to readstd::endl;return 1;}std::coutReceived to client :bufferstd::endl;std::string res_msgHello Client!;int wrwrite(client_sock,res_msg.c_str(),res_msg.length());if (wr-1){std::cerrFiald to writestd::endl;return 1;}close(client_sock);close(listen_sock);}