《LINUX C编程实战》自学笔记——套接字编程(一)

来源:互联网 发布:合同档案管理系统软件 编辑:程序博客网 时间:2024/06/06 03:20
#include<sys/types.h>
#include<sys/socket.h>


(1)请求建立连接——套接字与服务器连接。

(1.1)

如果该套接字类型是SOCK_STREAM,则connect函数用于向服务器发出连接请求,服务器的IP地址和端口号由serv_addr指定;

如果该套接字类型是SOCK_DGRAM,则connect并不建立真正的连接,只是告诉内核与该套接字通讯的目的地址(由第二个参数指定),只有该目的地址发来的数据才会被该socket接收。对于SOCK_DGRAM类型的套接字,connect的好处是不必每次发送和接收数据时都指定目的地址。

(1.2)

对于面向连接(如TCP)的套接字,其只能调用一次connect函数。

对于无连接(如UDP)的套接字,可以多次 调用connect以改变目的地址的绑定。将参数serv_addr中的sa_family设置为AF_UNSPEC即可。

bind和connect的参数相似。




(2)绑定套接字到服务器的端——套接字与服务器端口绑定

serv_addr提供了sock_fd将绑定的本地地址,可以将serv_addr的sin_addr设置为INADDR_ANY而不是某个确定的IP就可以绑定到任何网络接口。对于只有一个IP地址的计算机,INADDR_ANY就是该机的IP地址。对于有多块网卡的计算机,INADDR_ANY表示本服务器程序将处理来自所有网络接口上相应端口的连接请求。


(3)将socket建立的是主动套接字


(4)接受连接,可以接收的状态。只能对面向连接的套接字使用accept函数。                                套接字接受客户端连接请求

int accpet(int sock_fd,    struct sockaddr *addr,   socklen_t   *addrlen)

接受连接后,系统写入addr客户端的地址和端口等信息,接受连接前是没有的。


(5)TCP套接字的数据传输

(5.1)send:send负责将buf中的数据复制到发送缓冲区。复制完成就返回。

(5.2)recv:recv将s的接收缓冲区数据复制到buf中,len为buf的长度。

第一步:等待直到套接字发送缓冲区的数据发送完毕;

第二步:等待直到套接字接收缓冲区有数据并且接收完毕,开始从接收缓冲区复制数据到buf中;

第三步:复制完毕,返回值。

原创粉丝点击