实在socket便是该形式的四个落到实处,其实socket正是该情势的1个完成

备注:

壹、socket函数的参数:当protocol为0时,会自动选取type类型对应的默许协议

2、将sin_addr设置为INADDR_ANY”的意义是何等?

转移过来正是0.0.0.0,泛指本机的情致,也正是意味着本机的保有IP,因为有点电话不止1块网卡,多网卡的动静下,那个就意味着全体网卡ip地址的意趣。
比如一台电脑有三块网卡,分别连接五个网络,那么那台微型总结机就有三个ip地址了,假诺有些应用程序必要监听某些端口,那他要监听哪个网卡地址的端口呢?
即便绑定有个别具体的ip地址,你只好监听你所设置的ip地址所在的网卡的端口,其余两块网卡不只怕监听端口,若是自个儿急需多少个网卡都监听,这就供给绑定一个ip,也就分外须要管理一个套接字进行数据调换,那样岂不是很麻烦?
所以出现INADD奥迪Q五_ANY,你只需绑定INADD凯雷德_ANY,管理三个套接字就行,不管多少是从哪个网卡过来的,只要是绑定的端口号过来的数额,都能够接收到

 

什么是socket?

socket起源于Unix,而Unix/Linux基本农学之壹正是“壹切皆文件”,都能够用“打开open
–> 读写write/read –>
关闭close”方式来操作。其实socket便是该格局的三个完结,socket正是壹种奇特的文书,壹些socket函数正是对其进展的操作(读/写IO、打开、关闭)

socket的效用是用于网络通信,网络通信1般指的是见仁见智主机之间的长河通信,比如本人电脑上的qq和您电脑上的qq实现通信,都以进程之间发送数据.

在地点用pid标识三个进程,在互联网中,tcp/ip协议的互连网层“ip地址”能够唯1标识网络中的主机,传输层的“协议+端口”能够唯一标识主机中的应用程序(进度)。(ip地址,协议,端口)就足以标识网络的历程了,互联网中的进度通信就能够利用那个标志与任何进程展开交互

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

壹,创立套接字, 利用socket函数

2,绑定套接字: bind

叁,监听套件字: listen

4,accept,接收客户端的连日,3遍握手就发生在那一个阶段, 
那些函数再次来到二个新的套接字

伍,处总管务

socket客户端:

壹,创建套接字: socket

二,连接服务端: connect

3,处管事人情


服务端源码:

图片 1图片 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     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

客户端源码:

图片 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 
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正是该方式的1个兑现,socket就是1种尤其的文本,①些socket函数便是对其开始展览的操作(读/写IO、打开、关闭)

socket的功力是用以网络通讯,网络通信1般指的是例外主机之间的经过通讯,比如笔者电脑上的qq和你电脑上的qq达成通信,都以经过之间发送数据.

在本土用pid标识3个经过,在互连网中,tcp/ip协议的互连网层“ip地址”能够唯1标识网络中的主机,传输层的“协议+端口”能够唯一标识主机中的应用程序(进度)。(ip地址,协议,端口)就能够标识互联网的进程了,互联网中的进度通讯就足以选择那几个标志与其他进度展开相互

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

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

2,绑定套接字: bind

三,监听套件字: listen

肆,accept,接收客户端的连接,一次握手就生出在那个等级, 
那个函数重临一个新的套接字

伍,处管事人务

socket客户端:

一,创造套接字: socket

二,连接服务端: connect

三,处理工科作


服务端源码:

图片 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     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

客户端源码:

图片 7图片 8

 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地址的意味。
比如1台电脑有3块网卡,分别连接三个互联网,那么那台微型总括机就有3个ip地址了,假设有个别应用程序须求监听某些端口,那他要监听哪个网卡地址的端口呢?
假若绑定有些具体的ip地址,你不得不监听你所设置的ip地址所在的网卡的端口,别的两块网卡不能够监听端口,假使笔者急需八个网卡都监听,那就须求绑定二个ip,也就十分供给管住一个套接字实行数据交流,那样岂不是很麻烦?
所以现身INADDTucson_ANY,你只需绑定INADDHaval_ANY,管理3个套接字就行,不管多少是从哪个网卡过来的,只假使绑定的端口号过来的数量,都足以接过到

 

相关文章