您的位置:首页 > 理论基础 > 计算机网络

Linux网络编程入门必备函数说明

2016-09-01 11:19 573 查看
服务器端

1、int socket(int domain, int type,int protocol)

domain:说明我们网络程序所在的主机采用的通讯协族(AF_UNIX和AF_INET等).

AF_UNIX只能够用于单一的Unix系统进程间通信,而AF_INET是针对Internet的,

type:我们网络程序所采用的通讯协议,SOCK_STREAM表明我们用的是TCP协议,SOCK_DGRAM 表明我们用的是UDP协议,

protocol:由于我们指定了type,所以这个地方我们一般只要用0来代替就可以了

sockfd = socket(AF_INET,SOCK_STREAM, 0)

2、int bind(int sockfd, struct sockaddr *my_addr, int addrlen)

sockfd:是由socket调用返回的文件描述符.

addrlen:是sockaddr结构的长度.

my_addr:是一个指向sockaddr的指针.

中有sockaddr的定义

struct sockaddr_in {

short int sin_family; /* 通信类型 */

unsigned short int sin_port; /* 端口 */

struct in_addr sin_addr; /* Internet 地址 */

unsigned char sin_zero[8]; /* 与sockaddr结构的长度相同*/

};

我们主要使用Internet所以sin_family一般为AF_INET,

sin_addr设置为INADDR_ANY表示可以和任何的主机通信,sin_port是我们要监听的端口号.

sin_zero[8]是用来填充的. bind将本地的端口同socket返回的文件描述符捆绑在一起.

server_addr.sin_family = AF_INET;

server_addr.sin_addr.s_addr = htonl(INADDR_ANY);

server_addr.sin_port = htons(portnumber);

3、int listen(int sockfd, int backlog);

sockfd 是调用 socket() 返回的套接字文件描述符。backlog 是在进入 队列中允许的连接数目。

4、int accept(int sockfd, struct sockaddr *addr,int *addrlen)

sockfd:是listen后的文件描述符.

addr, addrlen是用来给客户端的程序填写的,服务器端只要传递指针就可以了.

bind,listen和accept是服务器端用的函数,

accept调用时,服务器端的程序会一直阻塞到有一个 客户程序发出了连接.

accept成功时返回最后的服务器端的文件描述符

new_fd = accept(sockfd, (struct sockaddr *)(&client_addr), &sin_size)

注意:accept的第一个参数为服务器的socket描述字,是服务器开始调用socket()函数生成的,称为监听socket描述字;而accept函数返回的是已连接的socket描述字。一个服务器通常通常仅仅只创建一个监听socket描述字,它在该服务器的生命周期内一直存在。内核为每个由服务器进程接受的客户连接创建了一个已连接socket描述字,当服务器完成了对某个客户的服务,相应的已连接socket描述字就被关闭。

TCP通信模式



客户端

result = connect(sockfd, (struct sockaddr*)&address, len);

//communicate with server socket

while(1)

{

printf("set send content:");

scanf("%c",&ch);

write(sockfd, &ch, 1);

printf("send to server:%c \n",ch);

read(sockfd, &ch, 1);

printf("read from server: %c\n", ch);

}

之后还有关于客户端开启多线程上传数据到服务端,以及服务端开启多线程处理多个客户端的连接与数据通信。暂且不写了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: