socket
1、
2、tcp、udp客户服务器socket一般过程
1 TCP编程的服务器端一般步骤是: 2 3 4 1、创建一个socket,用函数socket(); 5 2、设置socket属性,用函数setsockopt(); * 可选 6 3、绑定IP地址、端口等信息到socket上,用函数bind(); 7 4、开启监听,用函数listen(); 8 5、接收客户端上来的连接,用函数accept(); 9 6、收发数据,用函数send()和recv(),或者read()和write(); 10 7、关闭网络连接; 11 8、关闭监听; 12 13 struct sockaddr_in addr; 定义一个ip地址 14 15 16 17 TCP编程的客户端一般步骤是: 18 19 20 1、创建一个socket,用函数socket(); 21 2、设置socket属性,用函数setsockopt();* 可选 22 3、绑定IP地址、端口等信息到socket上,用函数bind();* 可选 23 4、设置要连接的对方的IP地址和端口等属性; 24 5、连接服务器,用函数connect(); 25 6、收发数据,用函数send()和recv(),或者read()和write(); 26 7、关闭网络连接; 27 28 29 30 UDP编程的服务器端一般步骤是: 31 32 33 34 35 1、创建一个socket,用函数socket(); 36 2、设置socket属性,用函数setsockopt();* 可选 37 3、绑定IP地址、端口等信息到socket上,用函数bind(); 38 4、循环接收数据,用函数recvfrom(); 39 5、关闭网络连接; 40 41 42 43 44 UDP编程的客户端一般步骤是: 45 46 47 1、创建一个socket,用函数socket(); 48 2、设置socket属性,用函数setsockopt();* 可选 49 3、绑定IP地址、端口等信息到socket上,用函数bind();* 可选 50 4、设置对方的IP地址和端口等属性; 51 5、发送数据,用函数sendto(); 52 6、关闭网络连接; 53 54 55 56 57 server.c 58 #include <stdio.h> 59 #include <stdlib.h> 60 #include <errno.h> 61 #include <string.h> 62 #include <sys/types.h> 63 #include <sys/socket.h> 64 #include <sys/wait.h> 65 #include <netinet/in.h> 66 67 68 #define MYPORT 3490 69 #define BACKLOG 10 70 71 72 main() 73 { 74 int sockfd, new_fd;/*listen on sock_fd, new connection on new_fd*/ 75 struct socketaddr_in my_addr;//my address infomation 76 struct socketaddr_in their_addr;//connector`s address infomation 77 int sin_size; 78 79 if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { //socket(AF_INET, SOCK_STREAM, 0) 这是创建一个socket 80 /*AF_INET 表示用IPV4地址族, 81 SOCK_STREAM 是说是要是用流式套接字 82 0 是指不指定协议类型,系统自动根据情况指定*/ 83 perror("socket err"); 84 exit(1); 85 } 86 87 my_addr.sin_family = AF_INET; //sin_family表示协议簇,一般用AF_INET表示TCP/IP协议。 88 my_addr.sin_port = htons(MYPORT);//设置端口号 89 //my_addr.sin_addr.s_addr = inet_addr("192.168.0.123"); 90 my_addr.sin_addr.s_addr = INADDR_ANY;//auto-fill with local ip 91 bzero(&(my_addr.sin_zero), 8); 92 if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1) { 93 perror("bind err"); 94 exit(1); 95 } 96 97 if (listen(sockfd, BACKLOG) == -1) { 98 perror("listen err"); 99 exit(1); 100 } 101 102 while(1) { 103 sin_size = sizeof(struct sockaddr_in); 104 105 if ((new_fd = accept(sockfd, (struct sockaddr_in *)&their_addr, &sin_size)) == -1) { 106 perror("accept err"); 107 continue; 108 } 109 printf("server: got connection from %s\n", inet_ntoa(their_addr.ain_addr)); 110 111 if (!fork()) { 112 if (send(new_fd, "Hello ,world!\n", 14, 0) == -1) { 113 perror("send err"); 114 } 115 close(new_fd); 116 exit(0); 117 } 118 while(waitpid(-1, NULL, WNOHANG) > 0); 119 } 120 } 121 122 123 124 125 #include <stdio.h> 126 #include <stdlib.h> 127 #include <sys/types.h> 128 #include <sys/socket.h> 129 #include <sys/un.h> 130 #include <unistd.h> 131 int main() 132 { 133 int server_sockfd, client_sockfd; 134 int server_len, client_len; 135 struct sockaddr_un server_address; 136 struct sockaddr_un client_address; 137 138 139 unlink("server_socket"); 140 server_sockfd = socket(AF_UNIX, SOCK_STREAM, 0); 141 142 143 server_address.sun_family = AF_UNIX; 144 strcpy(server_address.sun_path, "server_socket"); 145 server_len = sizeof(server_address); 146 bind(server_sockfd, (struct sockaddr *)&server_address, server_len); 147 148 149 listen(server_sockfd, 5); 150 while(1) { 151 char ch; 152 printf("server waiting!\n"); 153 154 155 client_len = sizeof(client_address); 156 client_sockfd = accept(server_sockfd, (struct sockaddr *)&client_address, &client_len); 157 158 159 read(client_sockfd, &ch, 1); 160 ch++; 161 write(client_sockfd, &ch, 1); 162 close(client_sockfd); 163 }
+