设计公司网站建设需要多少钱,网站开发移动app,长沙的互联网网站公司哪家好,网站建设 网址导航测试环境
Receiver: x86 UbuntuSender: arm64 android
发送整型数
C语言和套接字库来发送一个整型变量#xff08;int#xff09;的客户端程序。
它首先创建一个TCP套接字#xff0c;然后连接到指定的服务器地址和端口。接着#xff0c;它将一个整型变量#xff08;in…测试环境
Receiver: x86 UbuntuSender: arm64 android
发送整型数
C语言和套接字库来发送一个整型变量int的客户端程序。
它首先创建一个TCP套接字然后连接到指定的服务器地址和端口。接着它将一个整型变量int转换为网络字节序大端并使用send()函数发送给服务器。最后它关闭套接字并退出
#include stdio.h
#include stdlib.h
#include string.h
#include sys/socket.h
#include arpa/inet.h
#include unistd.h#define SERVER_IP 127.0.0.1 // 服务器IP地址
#define SERVER_PORT 8888 // 服务器端口号int main(int argc, char* argv[])
{const char *ip SERVER_IP;if(argc 2){ip argv[1]; }fprintf(stdout, ip:%s\n, ip);int sock; // 套接字描述符struct sockaddr_in server; // 服务器地址结构体int data 1234; // 要发送的整型数据int n; // 发送或接收的字节数// 创建一个TCP套接字sock socket(AF_INET, SOCK_STREAM, 0);if (sock -1){perror(socket failed);exit(1);}// 设置服务器地址结构体memset(server, 0, sizeof(server));server.sin_family AF_INET;server.sin_addr.s_addr inet_addr(ip);server.sin_port htons(SERVER_PORT);// 连接到服务器if (connect(sock, (struct sockaddr *)server, sizeof(server)) -1){perror(connect failed);exit(2);}#if 0// 将整型数据转换为网络字节序大端data htonl(data);// 发送整型数据给服务器n send(sock, data, sizeof(data), 0);if (n -1){perror(send failed);exit(3);}
#elseunsigned char sendbuf[4];sendbuf[0] data 0xff;sendbuf[1] (data 8) 0xff;sendbuf[2] (data 16) 0xff;sendbuf[3] (data 24) 0xff;// 发送整型数据给服务器n send(sock, sendbuf, sizeof(sendbuf), 0);if (n -1){perror(send failed);exit(3);}
#endif printf(Sent %d bytes to server\n, n);// 关闭套接字close(sock);return 0;
}
这是一个使用C语言和套接字库来接收一个整型变量int的服务器程序。
它首先创建一个TCP套接字然后绑定到指定的地址和端口。接着它监听客户端的连接请求并接受一个连接。然后它使用recv()函数接收客户端发送的整型数据并将其转换为主机字节序小端或大端。最后它打印出接收到的数据并关闭套接字。
#include stdio.h
#include stdlib.h
#include string.h
#include sys/socket.h
#include arpa/inet.h
#include unistd.h#define SERVER_IP 0.0.0.0 // 服务器IP地址
#define SERVER_PORT 8888 // 服务器端口号int main(int argc, char* argv[])
{int sock, client_sock; // 套接字描述符struct sockaddr_in server, client; // 服务器和客户端地址结构体int data; // 要接收的整型数据int n; // 发送或接收的字节数int len; // 客户端地址长度// 创建一个TCP套接字sock socket(AF_INET, SOCK_STREAM, 0);if (sock -1){perror(socket failed);exit(1);}// 设置服务器地址结构体memset(server, 0, sizeof(server));server.sin_family AF_INET;server.sin_addr.s_addr inet_addr(SERVER_IP);server.sin_port htons(SERVER_PORT);// 绑定套接字到指定的地址和端口if (bind(sock, (struct sockaddr *)server, sizeof(server)) -1){perror(bind failed);exit(2);}// 监听客户端的连接请求设置最大连接数为5if (listen(sock, 5) -1){perror(listen failed);exit(3);}printf(Waiting for client connection...\n);// 接受一个客户端的连接返回一个新的套接字描述符len sizeof(client);client_sock accept(sock, (struct sockaddr *)client, (socklen_t*)len);if (client_sock -1){perror(accept failed);exit(4);}printf(Connected to client: %s:%d\n, inet_ntoa(client.sin_addr), ntohs(client.sin_port));
#if 0// 接收客户端发送的整型数据n recv(client_sock, data, sizeof(data), 0);if (n -1){perror(recv failed);exit(5);}printf(Received %d bytes from client\n, n);// 将整型数据转换为主机字节序小端或大端data ntohl(data);
#else// 接收客户端发送的整型数据unsigned char recvbuf[4];n recv(client_sock, recvbuf, sizeof(recvbuf), 0);if (n -1){perror(recv failed);exit(5);}printf(Received %d bytes from client\n, n);data (recvbuf[0] 0xff) | (recvbuf[1] 8) 0xff00 | (recvbuf[2] 16)0xff0000 | (recvbuf[3] 24)0xff000000;
#endif// 打印出接收到的数据printf(Data: %d\n, data);// 关闭套接字close(client_sock);close(sock);return 0;
}发送并接受结构体
发送端
#include stdio.h
#include stdlib.h
#include string.h
#include sys/socket.h
#include arpa/inet.h
#include unistd.h #define SERVER_IP 127.0.0.1// 定义结构体
struct Data { int id; char name[20];
}; int main(int argc, char* argv[]) {const char* ip SERVER_IP;if(argc 2){ip argv[1];}fprintf(stdout, ip:%s\n, ip);int sockfd; struct sockaddr_in server_addr; struct Data data { 1, John }; // 创建套接字 sockfd socket(AF_INET, SOCK_STREAM, 0); if (sockfd 0) { perror(socket error); exit(EXIT_FAILURE); } // 设置服务器地址信息 memset(server_addr, 0, sizeof(server_addr)); server_addr.sin_family AF_INET; server_addr.sin_addr.s_addr inet_addr(ip); // 修改为服务器地址 server_addr.sin_port htons(8888); // 修改为服务器端口号 // 连接服务器 if (connect(sockfd, (struct sockaddr *)server_addr, sizeof(server_addr)) 0) { perror(connect error); exit(EXIT_FAILURE); } // 发送结构体数据 if (send(sockfd, data, sizeof(data), 0) 0) { perror(send error); exit(EXIT_FAILURE); } printf(Data sent successfully\n); // 关闭套接字 close(sockfd); return 0;
}
接收端
#include stdio.h
#include stdlib.h
#include string.h
#include sys/socket.h
#include arpa/inet.h
#include unistd.h // 定义结构体
struct Data { int id; char name[20];
}; int main() { int sockfd; struct sockaddr_in server_addr, client_addr; struct Data data; socklen_t client_len sizeof(client_addr); // 创建套接字 sockfd socket(AF_INET, SOCK_STREAM, 0); if (sockfd 0) { perror(socket error); exit(EXIT_FAILURE); } // 设置服务器地址信息 memset(server_addr, 0, sizeof(server_addr)); server_addr.sin_family AF_INET; server_addr.sin_addr.s_addr INADDR_ANY; server_addr.sin_port htons(8888); // 绑定套接字到服务器地址 if (bind(sockfd, (struct sockaddr *)server_addr, sizeof(server_addr)) 0) { perror(bind error); exit(EXIT_FAILURE); } // 监听连接 if (listen(sockfd, 5) 0) { perror(listen error); exit(EXIT_FAILURE); } printf(Waiting for a connection...\n); // 接受客户端连接 int connfd accept(sockfd, (struct sockaddr *)client_addr, client_len); if (connfd 0) { perror(accept error); exit(EXIT_FAILURE); } printf(Connection accepted from %s:%d\n, inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port)); // 接收结构体数据 if (recv(connfd, data, sizeof(data), 0) 0) { perror(recv error); exit(EXIT_FAILURE); } printf(Received data: id %d, name %s\n, data.id, data.name); // 关闭套接字和连接 close(connfd); close(sockfd); return 0;
}
介绍四个函数
uint32_t htonl(uint32_t hostlong); // 将一个32位数从主机字节顺序转换为网络字节顺序 uint16_t htons(uint16_t hostshort); // 将一个16位数从主机字节顺序转换为网络字节顺序 uint32_t ntohl(uint32_t netlong); // 将一个32位数从网络字节顺序转换为主机字节顺序 uint16_t ntohs(uint16_t netshort); // 将一个16位数从网络字节顺序转换为主机字节顺序