tcp協議是應用在傳輸層的協議。是一種面向連線的、可靠的協議。
tcp協議的特點:
1)面向位元組流。
2)tcp是面向連線的運輸層協議
3) 每一條tcp鏈結只能有兩個端點
4)tcp提供可靠交付的服務
5)tcp提供全雙工通訊
根據tcp協議三次握手,server一直處於監聽狀態,等接受到client的請求連線(connect)訊號,accept該連線。
server:
1 #include2 #include3 #include4 #include5 #include6 #include7 #include8 #include9 #define _backlog 5
10 void usage(char *_proc)
11 14 int startup(const char *ip,const int port)
15 22 struct sockaddr_in local;
23 local.sin_family = af_inet;
24 local.sin_port = htons(port);
25 local.sin_addr.s_addr = inet_addr(ip);
26 if(bind(sock,(struct sockaddr*)&local,sizeof(local))<0) //將ip和埠號繫結
27
31 if(listen(sock,_backlog)<0) //監聽是否有程序與之建立連線
32
36 return sock;
37 }
38 void* pthread(void * arg)
39 49 else if(size==0)
50
54 else
55
59 printf("client say: %s\n",buf);
60 }
61 close(sock);
62 return null;
63 }
64 65 int main(int argc,char *ar**)
66 72 char *ip = ar**[1];
73 int port = atoi(ar**[2]);
74 int listen_sock = startup(ip,port);
75 struct sockaddr_in client;
76 socklen_t len = sizeof(client);
77 while(1)
78
85 printf("get a client... sock %d,ip: %s,port: %d\n",new_sock,inet_nto a(client.sin_addr),ntohs(client.sin_port));
86 #ifdef _v1_ //單程序通訊
87 char buf[1024];
88 while(1)
89
95 else if(size==0)
96
100 else
101
105 printf("client say :%s\n",buf);
106 }
107 #elif _v2_ //多程序
108 pid_t pid = fork();
109 if(pid<0)
110
114 else if(pid == 0)
115
127 else if(size==0)
128
132 else
133
137 printf("[ip]:%s say :%s\n",_client,buf);
138 }
139 close(new_sock);
140 exit(0);
141 }
142 else
143
146 #elif _v3_ //多執行緒
147 pthread_t pid;
148 pthread_create(&pid,null,pthread,(void*)new_sock);
149 pthread_detach(pid);
150 #else
151 printf("default");
152 #endif
153 }
154 return 0;
155 }
client:
1 #include2 #include3 #include4 #include5 #include6 #include7 #include8
9 void usage(char *proc)
10 13 int main(int argc,char *ar**)
14 20 int sock = socket(af_inet,sock_stream,0);
21 if(sock<0)
22
26 int port = atoi(ar**[2]);
27 char *ip = ar**[1];
28 struct sockaddr_in remote;
29 remote.sin_family = af_inet;
30 remote.sin_port = htons(port);
31 remote.sin_addr.s_addr = inet_addr(ip);
32 33 int ret = connect(sock,(struct sockaddr*)&remote,sizeof(remote));
34 if(ret<0)
35
39 char buf[1024];
40 while(1)
41
47 return 0;
48 }
結果:[fbl@localhost tcp]$ ./tcp_server 192.168.1.106 8080
get a client... sock 4,ip: 192.168.1.106,port: 51708
client say: hello
client say: hi
client say: nihao
client close...
^c[fbl@localhost tcp]$
[fbl@localhost tcp]$ ./tcp_client 192.168.1.106 8080
please say: hello
please say: hi
please say: nihao
please say: ^c
[fbl@localhost tcp]$
基於TCP協議的C S通訊
一 環境 os win10 ide visual studio 2010 二 在同一解決方案下新建兩個win32控制台應用程式,專案名分別是server和client,分別在兩個專案的原始檔下新增server.cpp和client.cpp server.cpp include include inc...
基於TCP協議的WCF通訊
windows communication foundation wcf 是由微軟開發的一系列支援資料通訊的應用程式框架,可以翻譯為windows 通訊開發平台。從以下四個方面對wcf進行介紹 基於tcp協議的wcf通訊主要包含了以下三部分,分別為服務契約 公共介面ihelloservice 宿主程...
基於TCP協議的socket通訊
一 伺服器端 1 建立serversocket,即伺服器端的socket,繫結指定的埠,並偵聽此埠 serversocket server new serversocket 8888 2 呼叫accept 方法,開始偵聽,等待客戶端的連線,在未連線成功之前,處於阻塞狀態,返回的socket,用於與客...