基本套接字分为客户机/服务器和点对点模式。
C/S:sever/client---------------------------一般采用TCP
B/S:browser/server-----------------------一般采用UDP
常用的数据结构 有in_addr(存储IP地址),sockaddr_in(表示Internet协议地址结构),sockaddr(存储主机IP地址和接口信息)。
struct in_addr{ union{ struct {u_char, s_b1, s_b2, s_b3, s_b4} s_un_b; struct {u_short s_w1, s_s2;} s_un_w; u_long s_addr; } s_un;
}
struct sockaddr_in{ short sin_family; // AF_INET u_short sin_port; // 16位端口号 struct in_addr sin_addr; // 32位IP地址 char sin_zero[ 8 ]; };
struct sockaddr{ unsigned short sa_family; char sa_data[ 14 ]; };
例子:
in_addr test; test..s_un_b.s_b1 = 192 ; test..s_un_b.s_b2 = 168 ; test..s_un_b.s_b3 = 0 ; test..s_un_b.s_b4 = 1 ;
struct sockaddr_in serverAddr; memst( &serverAddr, 0 , sizeof ( struct sockaddr_in)); serverAddr.sin_family =AF_INET; // AF_INET表示TCP serverAddr.sin_port=htons( 80 ); serverAddr.sin_addr.s_addr =htonl(INADDR_ANY); // INADDR_ANY表示当前所用的IP
常用函数
#incldue<sys/socket.h> // 创建套接字 SOCKET PASCAL FAR socket( int af, int type, int protocol) // af指定通信协议--AF_UNIX,AF_INET,AF_NS // type指定套接字类型,SOCK_STREAM(TCP),SOCK_DGRAM(UDP),SOCK_RAM(原始套接字) // protocol指定特定协议 // 套接字绑定 int PASCAL FAR bind(SOCKET s, const struct sockaddr FAR *name, int namelen) // s指定要关联的套接字 // name指定要绑定的IP地址与端口信息 // 侦听 int PASCAL FAR listen(SOCKET s, int backlog) // backlog指定请求连接队列的最大长度,一般设为5 // 侦听,接受数据 SOCKET PASCAL FAR accept(SOCKET s, struct sockaddr FAR* addr, int FAR* addrlen) // s为当前指定的套接字 // addr为保存当前客户端的地址信息 // 创建连接 int PASCAL FAR connect(SOCKET s, const struct sockaddr FAR* name, int namelen) // TCP发送数据 int PASACAL FAR send(SOCKET s, const char FAR* buf, int len, int flags); // s指定已经连接的套接字 // buf表示待发送数据的缓冲区 // flags用于设定发送控制参数,一般为0 // TCP接受数据 int PASACAL FAR recv(SOCKAET s, char FAR* buf, int len, int flags); // UDP发送数据 ssize_t sendto( int sockfd, const void *buf, size_t len, int flags, const struct sockaddr * to, socklen_t tolen) ssize_t recvform( int sockfd, const void *buf, size_t len, int flags, const struct sockaddr * from , socklen_t fromlen) // sockfd表示已经创建好的一个UDP套接字 // to.from用于设置接受方和发送方的地址信息 // tolen,fromlen用于设置地址信息的长度
例子:
TCP:
UDP: