Socket网络编程复习与总结

TCP部分

头文件Winsock32.h
库文件ws2_32.lib
(注:以下在服务器和客户端都能发送和接收)

服务器:

  WSAData wsaData;
  int     error;

  error = WSAStartup( MAKEWORD( 2, 2 ), &wsaData );
然后判断error值!=,返回;
然后判断是否被DLL支持

socket(,,)
第一个参数必须:AF_INET,表示地址协议族
第二个参数:a.SOCK_DGRAM,b.SOCK_STREAM. a是UDP类型,b是TCP类型
第三个参数:最好为0,他会根据地址类型和套接字类别,自动为你选择一个合适的协议
调用成功则返回一个SOCK类型的数据类型描述符,如果失败,这个就会返回一个INVALID_SOCKET,错误信息可以通过WSAGetLastError函数返回。


bind(,,)
第一个参数为要绑定的socket.
第二个参数指定该套接字的本地地址信息,是指向sockaddr结构的指针变量,对于不同协议不同(所以我们要用到第三个参数sizeof(sockddr)),在TCP/IP协议中,我们可以用socketaddr_in结构代替sockaddr。
struct socketaddr_in
{
short sin_family;//这个固定为AF_INET,
unsigned short sin_port;//端口号,注意,这里必须用网络字节序,调用函数htons函数
struct in_addr sin_addr;//IP地址,如果指定为INADDR_ANY,则允许套接字向任何分配给本机的IP地址发送或者接收数据,这对于有多个网卡的机器来说,就简化了程序的编写,如果只想让一个IP地址接收数据,则必须指定具体某个IP,这可以用inet_addr()函数,注意,这里也必须用网络字节序,调用函数htonl函数
char sin_zero[8];//只是个填充,以保证socketaddr_in与sockaddr长度一样
}
bind()函数调用成功返回0,失败就会返回一个SOCKET_ERROR,同样的错误信息可以通过WSAGetLastError函数返回。

listen(,)
第一个参数为套接字
第二个参数:等待连接最长请求队列

在死循环里调用accept(,,)  //等待客户端连接
第一个参数为套接字
第二个参数为客户端的IP
第三个参数地址结构的长度,必须有一个初始值,可以用sizeof(SOCKADDR)
返回一个SOCKET

send(,,,)
第一个参数为套接字(accept返回值)
第二个参数包含被传送的数据的buffer
第三个参数buffer数据的长度
第四个参数flag,影响send的行为,设为0

recv(,,,)
第一个参数为套接字(accept返回值)
第二个参数包含被接收的数据的buffer
第三个参数buffer数据的长度
第四个参数flag,影响recv的行为,设为0

最后closesocket().


客户端:
WSAStartup方法调用,建立一个socket,这与服务器一样

connect(,,)
第一个参数为套接字
第二个参数地址结构体信息,与服务器端bind函数类似
第三个参数地址结构长度

recv(,,,)
与服务器端recv函数类似

send()
与服务器端send函数类似

closesocket
 

 

UDP部分

头文件Winsock32.h
库文件ws2_32.lib

服务器:
WSAStartup方法调用,建立一个socket,这与TCP服务器类似(第二个参数改为SOCK_DGRAM)

bind()一样

recvfrom(,,,,,)
第一个参数为socket
第二个参数buf数组
第三个参数buf的长度
第四个参数flag,设为0,
第五个参数目的地址结构的指针(out)
第六个参数整形的指针,返回地址结构的大小,(in,out)

closesocket()

WSACleanup()

客户端:
WSAStartup方法调用,建立一个socket

sendto(,,,,)
第一个参数为socket
第二个参数buf数组
第三个参数buf的长度
第四个参数flag,设为0,
第五个参数目的地址结构的指针(out)
第六个参数地址结构体的长度,(in,out)

closesocket()

WSACleanup()

你可能感兴趣的:(编程,socket,网络,struct,服务器,buffer)