实际上socket正是该形式的贰个兑现,其实socket正是该方式的贰个贯彻

备注:

1、socket函数的参数:当protocol为0时,会自行采纳type类型对应的暗中同意协议

2、将sin_addr设置为INADDR_ANY”的含义是如何?

改变过来就是0.0.0.0,泛指本机的意味,也便是表示本机的富有IP,因为微微电话不仅一块网卡,多网卡的景色下,那几个就意味着全体网卡ip地址的乐趣。
比如一台微机有3块网卡,分别连接多个网络,那么那台Computer就有3个ip地址了,即使某些应用程序须求监听有个别端口,那他要监听哪个网卡地址的端口呢?
假使绑定某些具体的ip地址,你不得不监听你所设置的ip地址所在的网卡的端口,另外两块网卡不能够监听端口,固然作者须求多个网卡都监听,那就要求绑定3个ip,也就也正是须要管住3个套接字举行数据交流,这样岂不是很麻烦?
所以出现INADD猎豹CS6_ANY,你只需绑定INADD传祺_ANY,管理二个套接字就行,不管多少是从哪个网卡过来的,只要是绑定的端口号过来的多寡,都能够收起到

 

什么是socket?

socket起点于Unix,而Unix/Linux基本文学之一正是“一切皆文件”,都得以用“展开open
–> 读写write/read –>
关闭close”方式来操作。其实socket正是该形式的一个完毕,socket正是一种奇特的文书,一些socket函数就是对其开始展览的操作(读/写IO、张开、关闭)

socket的效应是用来互联网通信,互联网通信一般指的是例外主机之间的进程通信,譬喻本身计算机上的qq和您计算机上的qq完毕通信,都以进度之间发送数据.

在地头用pid标志三个经过,在互联网中,tcp/ip协议的互连网层“ip地址”能够独一标记网络中的主机,传输层的“协议+端口”能够独一标记主机中的应用程序(进度)。(ip地址,协议,端口)就能够标志互联网的长河了,网络中的进度通讯就足以选拔那么些标记与其余进度张开相互

socket服务端编制程序基本步骤:

1,创设套接字, 利用socket函数

2,绑定套接字: bind

3,监听套件字: listen

4,accept,接收客户端的接连,3次握手就生出在这些品级, 
这一个函数再次回到三个新的套接字

5,处监护人情

socket客户端:

1,成立套接字: socket

2,连接服务端: connect

3,管理业务


服务端源码:

图片 1
1 #include <stdio.h> 2 #include <sys/types.h> 3 #include
<sys/socket.h> 4 #include <stdlib.h> 5 #include
<string.h> 6 #include <arpa/inet.h> 7 #include
<unistd.h> 8 9 int main(int argc, char *argv[]) 10 { 11 int
sockfd = -1; 12 int bindres = -1; 13 int listenres = -1; 14 15 sockfd =
socket( AF_INET, SOCK_STREAM, 0 ); 16 if ( -1 == sockfd ) { 17 perror(
“sock created” ); 18 exit( -1 ); 19 } 20 21 struct sockaddr_in server;
22 memset( &server, 0, sizeof( struct sockaddr_in ) ); 23
server.sin_family = AF_INET; 24 server.sin_port = 6666; 25
server.sin_addr.s_addr = htonl( INADDR_ANY ); 26 27 bindres = bind(
sockfd, (struct sockaddr*)&server, sizeof( server ) ); 28 if( -1 ==
bindres ) { 29 perror( “sock bind” ); 30 exit( -1 ); 31 } 32 33
listenres = listen( sockfd, SOMAXCONN ); 34 if( -1 == listenres ) { 35
perror( “sock listen” ); 36 exit( -1 ); 37 } 38 39 struct sockaddr_in
peerServer; 40 int acceptfd = -1; 41 socklen_t len = sizeof( peerServer
); 42 acceptfd = accept( sockfd, (struct sockaddr*)&peerServer, &len );
43 if ( -1 == acceptfd ) { 44 perror( “sock accept” ); 45 exit( -1 ); 46
} 47 48 char recvBuf[1024]; 49 while( 1 ) { 50 memset( recvBuf, 0,
sizeof( recvBuf ) ); 51 int recvBytes = read( acceptfd, recvBuf, sizeof(
recvBuf ) ); 52 fputs( recvBuf, stdout ); 53 write( acceptfd,recvBuf,
recvBytes ); 54 } 55 56 close( sockfd ); 57 close( acceptfd ); 58 59
return 0; 60 } View Code

客户端源码:

图片 2
1 #include <stdio.h> 2 #include <sys/types.h> 3 #include
<sys/socket.h> 4 #include <stdlib.h> 5 #include
<string.h> 6 #include <arpa/inet.h> 7 #include
<unistd.h> 8 9 int main(int argc, char *argv[]) 10 { 11 int
sockfd = -1; 12 13 sockfd = socket( AF_INET, SOCK_STREAM, 0 ); 14 if (
-1 == sockfd ) { 15 perror( “sock created” ); 16 exit( -1 ); 17 } 18 19
struct sockaddr_in server; 20 memset( &server, 0, sizeof( struct
sockaddr_in ) ); 21 server.sin_family = AF_INET; 22 server.sin_port
= 6666; 23 server.sin_addr.s_addr = inet_addr( “127.0.0.1” ); 24 25
int res = -1; 26 res = connect( sockfd, (struct sockaddr*)&server,
sizeof( server ) ); 27 if( -1 == res ){ 28 perror( “sock connect” ); 29
exit( -1 ); 30 } 31 32 char sendBuf[1024] = { 0 }; 33 char
recvBuf[1024] = { 0 }; 34 while( fgets( sendBuf, sizeof( sendBuf ),
stdin ) != NULL ) { 35 write( sockfd, sendBuf, sizeof( sendBuf ) ); 36
read( sockfd, recvBuf, sizeof( recvBuf ) ); 37 fputs( recvBuf, stdout );
38 memset( sendBuf, 0, sizeof( sendBuf ) ); 39 memset( recvBuf, 0,
sizeof( recvBuf ) ); 40 } 41 42 close( sockfd ); 43 44 return 0; 45 }
View Code

什么是socket?

socket源点于Unix,而Unix/Linux基本农学之一正是“一切皆文件”,都足以用“张开open
–> 读写write/read –>
关闭close”形式来操作。其实socket正是该情势的三个落到实处,socket就是一种独特的文件,一些socket函数正是对其进行的操作(读/写IO、展开、关闭)

socket的成效是用以网络通信,网络通信一般指的是例外主机之间的进程通信,比方小编计算机上的qq和你计算机上的qq完成通信,都是经过之间发送数据.

在地面用pid标志贰个进程,在互连网中,tcp/ip协议的网络层“ip地址”能够独一标记网络中的主机,传输层的“协议+端口”能够独一标记主机中的应用程序(进度)。(ip地址,协议,端口)就足以标志网络的进度了,网络中的进度通讯就能够利用这一个标记与别的进程打开互动

socket服务端编制程序基本步骤:

1,创制套接字, 利用socket函数

2,绑定套接字: bind

3,监听套件字: listen

4,accept,接收客户端的接连,3次握手就时有发生在那个品级, 
这些函数重返一个新的套接字

5,处总管情

socket客户端:

1,创设套接字: socket

2,连接服务端: connect

3,处理专门的工作


服务端源码:

图片 3图片 4

 1 #include <stdio.h>
 2 #include <sys/types.h>
 3 #include <sys/socket.h>
 4 #include <stdlib.h>
 5 #include <string.h>
 6 #include <arpa/inet.h>
 7 #include <unistd.h>
 8 
 9 int main(int argc, char *argv[])
10 {
11     int sockfd = -1;
12     int bindres = -1;
13     int listenres = -1;
14 
15     sockfd = socket( AF_INET, SOCK_STREAM, 0 );
16     if ( -1 == sockfd ) {
17         perror( "sock created" );
18         exit( -1 );
19     }
20     
21     struct sockaddr_in server;    
22     memset( &server, 0, sizeof( struct sockaddr_in ) );
23     server.sin_family = AF_INET;
24     server.sin_port = 6666;
25     server.sin_addr.s_addr = htonl( INADDR_ANY );
26 
27     bindres = bind( sockfd, (struct sockaddr*)&server, sizeof( server ) );
28     if( -1 == bindres ) {
29         perror( "sock bind" );
30         exit( -1 );
31     }
32 
33     listenres = listen( sockfd, SOMAXCONN );
34     if( -1 == listenres ) {
35         perror( "sock listen" );
36         exit( -1 );
37     }
38     
39     struct sockaddr_in peerServer;
40     int acceptfd = -1;
41     socklen_t len = sizeof( peerServer );
42     acceptfd = accept( sockfd, (struct sockaddr*)&peerServer, &len );
43     if ( -1 == acceptfd ) {
44         perror( "sock accept" );
45         exit( -1 );
46     }
47 
48     char recvBuf[1024];    
49     while( 1 ) {
50         memset( recvBuf, 0, sizeof( recvBuf ) );
51         int recvBytes = read( acceptfd, recvBuf, sizeof( recvBuf ) );
52         fputs( recvBuf, stdout );
53         write( acceptfd,recvBuf, recvBytes );
54     }
55     
56     close( sockfd );
57     close( acceptfd );
58 
59     return 0;
60 }

View Code

客户端源码:

图片 5图片 6

 1 #include <stdio.h>
 2 #include <sys/types.h>
 3 #include <sys/socket.h>
 4 #include <stdlib.h>
 5 #include <string.h>
 6 #include <arpa/inet.h>
 7 #include <unistd.h>
 8 
 9 int main(int argc, char *argv[])
10 {
11     int sockfd = -1;
12 
13     sockfd = socket( AF_INET, SOCK_STREAM, 0 );
14     if ( -1 == sockfd ) {
15         perror( "sock created" );
16         exit( -1 );
17     }
18     
19     struct sockaddr_in server;    
20     memset( &server, 0, sizeof( struct sockaddr_in ) );
21     server.sin_family = AF_INET;
22     server.sin_port = 6666;
23     server.sin_addr.s_addr = inet_addr( "127.0.0.1" );
24     
25     int res = -1;    
26     res = connect( sockfd, (struct sockaddr*)&server, sizeof( server ) );
27     if( -1 == res ){
28         perror( "sock connect" );
29         exit( -1 );
30     }
31 
32     char sendBuf[1024] = { 0 };
33     char recvBuf[1024] = { 0 };
34     while( fgets( sendBuf, sizeof( sendBuf ), stdin ) != NULL ) {
35         write( sockfd, sendBuf, sizeof( sendBuf ) );
36         read( sockfd, recvBuf, sizeof( recvBuf ) );
37         fputs( recvBuf, stdout );
38         memset( sendBuf, 0, sizeof( sendBuf ) );
39         memset( recvBuf, 0, sizeof( recvBuf ) );
40     }
41 
42     close( sockfd );
43 
44     return 0;
45 }

View Code

备注:

1、socket函数的参数:当protocol为0时,会活动选用type类型对应的暗许协议

2、将sin_addr设置为INADDR_ANY”的意思是哪些?

改变过来正是0.0.0.0,泛指本机的意趣,也正是意味着本机的装有IP,因为有一点点电话不只有一块网卡,多网卡的情形下,这一个就意味着全体网卡ip地址的情致。
比方一台Computer有3块网卡,分别连接多少个互联网,那么那台微型计算机就有3个ip地址了,假设有个别应用程序需求监听某个端口,那他要监听哪个网卡地址的端口呢?
假若绑定有些具体的ip地址,你不得不监听你所设置的ip地址所在的网卡的端口,其余两块网卡无法监听端口,假若小编索要多个网卡都监听,那就必要绑定3个ip,也就分外必要管住3个套接字进行数据调换,那样岂不是很麻烦?
所以现身INADD大切诺基_ANY,你只需绑定INADD安德拉_ANY,管理四个套接字就行,不管多少是从哪个网卡过来的,只借使绑定的端口号过来的数据,都得以采取到

 

http://www.bkjia.com/Linuxjc/1270019.htmlwww.bkjia.comtruehttp://www.bkjia.com/Linuxjc/1270019.htmlTechArticlelinux socket编制程序:简易客户端与服务端,linuxsocket
什么是socket?
socket起点于Unix,而Unix/Linux基本理学之一正是整整皆文件,都得以用张开open
读…

linux socket编制程序:简易客户端与服务端,linuxsocket

相关文章