简单的stream socket例子

来源:互联网 发布:c语言中合法的关键字 编辑:程序博客网 时间:2024/05/17 22:25

服务器端:

#include<stdio.h>#include<netinet/in.h>#include<sys/socket.h>#include<stdlib.h>int main(){int sock_server, sock_client;struct sockaddr_in server_addr, client_addr;server_addr.sin_family = AF_INET;server_addr.sin_port = htons(6666);server_addr.sin_addr.s_addr = htonl(INADDR_ANY);  //inet_addr("127.0.0.1")sock_server = socket(AF_INET, SOCK_STREAM, 0);if(sock_server < 0){printf("server socket create error!\n");exit(1);}int server_len = sizeof(server_addr);if(bind(sock_server, (struct sockaddr*)&server_addr, server_len) < 0){printf("bind server socket error\n");exit(0);}if(listen(sock_server, 5) < 0){printf("serever socket listen error\n");exit(1);}while(1){//printf("wait\n");int client_len = sizeof(client_addr);sock_client = accept(sock_server, (struct sockaddr*)&client_addr, (socklen_t*)&client_len);if(sock_client < 0){printf("Accept error\n");exit(1);}//printf("Accepted\n");int pid = fork();if(pid == 0){char buf[100];recv(sock_client, buf, 100, 0);printf("Message from client: %s\n", buf);send(sock_client, "Hello client", 100, 0);struct sockaddr_in server;server_len = sizeof(server);getsockname(sock_client, (struct sockaddr*)&server, (socklen_t*)&server_len);char local_addr[20];if(inet_ntop(AF_INET, (void*)&server.sin_addr, local_addr, sizeof(local_addr))){//printf("转换成功\n");printf("information: %s %d\n", local_addr, ntohs(server.sin_port));}elseprintf("地址转换失败\n");//printf("AAA\n");while(1)  //不调用close(),导致tcp状态一直处于close_wait状态;close(sock_client);}}close(sock_server);return 0;}



客户端:

#include<stdio.h>#include<netinet/in.h>#include<unistd.h>#include<sys/socket.h>#include<stdlib.h>#include<string.h>int main(){int sock_server, sock_client;struct sockaddr_in server_addr, client_addr;server_addr.sin_family = AF_INET;server_addr.sin_port = htons(6666);server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");sock_client = socket(AF_INET, SOCK_STREAM, 0);if(sock_client < 0){printf("client socket create error!\n");exit(1);}if(connect(sock_client, (struct sockaddr*)&server_addr, sizeof(server_addr)) != -1){printf("client success");char buf[100] = "Hello server";send(sock_client, buf, 100, 0);recv(sock_client, buf, 100, 0);printf("Message from server: %s\n", buf);int client_len = sizeof(client_addr);while(1);close(sock_client);}else{printf("Connect error\n");exit(1);}return 0;}