下面代码是tcp协议的服务器端代码:
该源码主要用了:
socket()-------创建套套接字(支持tcp协议的)
bind()---------绑定套接字和本机网卡ip信息
accept()--------等待连接(等待客户端发来请求信息),并返回可以对可读写的
套接字(同文件描速符,一样操作)
recv()--------通过得到的可读写的套接字然后接收客户端发送来得信息
#include <stdio.h>
2 #include <sys/types.h> /* See NOTES */
3 #include <sys/socket.h>
4 #include <netinet/in.h>
5 #include <string.h>
6
7 #define PORTS 6456
8
9 int main()
10 {
创建套接字:参数一:地址族;参数二:协议族(这用了
tcp协议);参数三:总是0(我也不清楚)
11 int s = socket (PF_INET, SOCK_STREAM, 0);
12 if(0 > s){
13 perror("socket");
14 return -1;
15 }
16
/初始化一个三元组信息(在赋值前最好先将这段空间清零),,这个三
元组信息主要存放,支持的地址族,本机开发的端号(这个是系统级资源,套接
字是进程级资源),本机的ip设定
17 struct sockaddr_in my_addr;
18
19 memset(&my_addr, 0, sizeof(struct sockaddr));
20
21 my_addr.sin_family = PF_INET;
22 my_addr.sin_port = htons(PORTS);
23 // my_addr.sin_addr.s_addr = INADDR_ANY;//这里让系统自己选择
24 my_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
25
26 int addrlen = sizeof(struct sockaddr);
27 /绑定套接字和三元组信息;三元组长度
if(0 > bind(s, (struct sockaddr*)&my_addr, addrlen)){
28 perror("bind");
29 return -1;
30 }
31
32 listen (s, 10);
33
34 //while(1)
35
36 printf("server: %d\n", s);
37
38 struct sockaddr_in addr;
39 int len = 0;
//等待连接,如果没到,就会阻塞在这里
40 int clients = accept(s, (struct sockaddr *)&addr, &len);
41 if(0 > clients){
42 perror("accept");
43 }else{
44 printf("%s:%d\n", inet_ntoa(addr.sin_addr), ntohs
(addr.sin_p ort));
45 }
46
47 printf("clients: %d\n", clients);
48
49 // while(1){
50 #define MAX (1024*1024)
51 char buf[MAX];
52 bzero(buf, MAX);
53 #if 0
/接收连接发送过来的消息,放到buf中
54 int ret = recv(clients, buf, MAX, 0);
55 if(0 > ret){
56 perror("recv");
57 return -1;
58 }
59 #else
/这里接收发送来得消息
60 int ret = read(clients, buf, MAX);
61 if(0 > ret){
62 perror("read");
63 return -1;
64 }
65 #endif
66 printf("%s:%d\n", buf, ret);
67 // }
68 }
下面是客户端:
下面用到:
socket()----创建套接字
connect()------------发送连接信息,这里包含要发送的服务器的三元结构,因
而可以发送到服务器,这里只是连接到对方服务器
send()----发送信息
1 #include <stdio.h>
2 #include <sys/types.h> /* See NOTES */
3 #include <sys/socket.h>
4 #include <netinet/in.h>
5 #include<string.h>
6 #define PORTS 6456
7
8 int main()
9 {
/创建套接字
10 int s = socket (PF_INET, SOCK_STREAM, 0);
11 if(0 > s){
12 perror("socket");
13 return -1;
14 }
15
16 struct sockaddr_in server_addr;
17
18 memset(&server_addr, 0, sizeof(struct sockaddr));
19 server_addr.sin_family = PF_INET;
20 server_addr.sin_port = htons(PORTS);
21 server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
22
23 socklen_t addrlen = sizeof(struct sockaddr_in);
24
/取得服务器的连接信息
25 if(0 > connect(s, (struct sockaddr *)&server_addr,
addrlen)){
26 perror("connect");
27 return -1;
28 }
29
30 //...
31 // while(1){
32 #define MAX (1024*1024)
33 char buf[MAX]="hello world";
34 #if 0
发送信息
35 int ret = send(s, buf, MAX, MSG_NOSIGNAL);
36 if(0 > ret){
37 perror("send");
38 break;
39 }
40 #else
用write发送信息
41 int ret = write(s, buf, MAX);
42 if(0 > ret){
43 perror("send");
44 // break;
45 }
46 #endif
47 //sleep(1);
48 // }
49
50 printf("----------1----------");
51 }