========TCP========
TCP_Server
socket()
bind()
listen()
accept()
write()
read()
close()和shutdown()
TCP_Client
socket()
connect()
send()和recv()
close()和shutdown()
========UDP========
UDP_Server
socket()
bind()
sendto()和recvfrom()
close()和shutdown()
UDP_Client
socket()
sendto()和recvfrom()
close()和shutdown()
getpeername()
gethostname()
--------------------------------------------------------------------------------
socket()
我们使用系统调用socket()来获得文件描述符:
#include<sys/types.h>
#include<sys/socket.h>
intsocket(intdomain,inttype,intprotocol);
第一个参数domain设置为AF_INET。
第二个参数是套接口的类型:SOCK_STREAM或
SOCK_DGRAM。第三个参数设置为0。
系统调用socket()只返回一个套接口描述符,如果出错,则返回-1。
--------------------------------------------------------------------------------
bind()
一旦你有了一个套接口以后,下一步就是把套接口绑定到本地计算机的某一个端口上。但如果你只想使用connect()则无此必要。
下面是系统调用bind()的使用方法:
#include<sys/types.h>
#include<sys/socket.h>
intbind(intsockfd,structsockaddr*my_addr,intaddrlen);
第一个参数sockfd是由socket()调用返回的套接口文件描述符。
第二个参数my_addr是指向数据结构sockaddr的指针。数据结构sockaddr中包括了关于你的地址、端口和IP地址的信息。
第三个参数addrlen可以设置成sizeof(structsockaddr)。
下面是一个例子:
#include<string.h>#include<sys/types.h>#include<sys/socket.h>#defineMYPORT3490main(){intsockfd;structsockaddr_inmy_addr;sockfd=socket(AF_INET,SOCK_STREAM,0);/*dosomeerrorchecking!*/my_addr.sin_family=AF_INET;/*hostbyteorder*/my_addr.sin_port=htons(MYPORT);/*short,networkbyteorder*/my_addr.sin_addr.s_addr=inet_addr("132.241.5.10");bzero(&(my_addr.sin_zero),8);/*zerotherestofthestruct*//*don'tforgetyourerrorcheckingforbind():*/bind(sockfd,(structsockaddr*)&my_addr,sizeof(structsockaddr));...}