我不得不说socket编程对于我来说是很复杂的,以前总是说socket,但到现在来说还是没有把他弄懂,即使当时记得了但过了几天又忘记了,所以需要常常看才能牢记。
socket编程的基础函数有socket(),bind(), listen(),accept(),send(),sendto(),recv(),recvfrom()根据客户端还是服务端不一样,针对udp,tcp又是不一样的,先对这几个函数进行说明
socket()------该函数用于建立一个socket连接,可以指定socket类型等信息,在建立socket连接之后,可以对sockaddr或sockaddr_in结构体进行初始化,来保存所建立的socket
地址信息
bind()---------用于将本地ip绑定到端口号,绑定其他ip不能成功,主要用于TCP中,在upd中则没有必要
listen()--------在创建套接字和绑定地址之后需要在该套接字上接受新的请求,listen()可以用来创建一个等待队列,用于存放未处理的客户端请求
accept()-------服务端调用listen之后,调用此函数等待并接收客户端的请求,通常他从listen()函数创建的等待队列中取出第一个未处理的连接请求
connetc()------在TCP中用于bind()之后的客户端用于与服务器建立连接,而在UDP中由于没有bind()函数,这个connect函数有点类似于bind()函数的作用
recv(),recv()---用于数据的发送和接收,在udp中可以在connet()建立连接之后再使用
sendto(),recvfrom()---在TCP中作用等同于send(),recv(),而在UDP中可以用在之前没有使用connect()的情况,这两个函数可以自动寻找指定地址并进行连接
服务器和客户端使用TCP协议的流程如下:
对于客户端有时不需要进行bind()调用,http://blog.csdn.net/smilestone322/article/details/8449165
服务器和客户端使用UDP协议的流程如下:
下面是各个函数的使用语法:
socket()使用语法: