SOCKET Socket Socket Socket u u Windows Socket

  • Slides: 62
Download presentation
SOCKET编程原理

SOCKET编程原理

Socket的位置

Socket的位置

两类系统中使用的Socket ü 不同操作系统中的Socket u u Windows Socket (Winsock) Linux Socket (BSD Socket)

两类系统中使用的Socket ü 不同操作系统中的Socket u u Windows Socket (Winsock) Linux Socket (BSD Socket)

Linux Socket ü 基本上就是BSD Socket ü 需要使用的头文件 u u 数据类型:#include <sys/types. h> 函数定义:#include <sys/socket.

Linux Socket ü 基本上就是BSD Socket ü 需要使用的头文件 u u 数据类型:#include <sys/types. h> 函数定义:#include <sys/socket. h>

Winsock启动示例 #include <Winsock 2. h> WORD w. Version. Requested; WSADATA wsa. Data; w. Version.

Winsock启动示例 #include <Winsock 2. h> WORD w. Version. Requested; WSADATA wsa. Data; w. Version. Requested=MAKEWORD(2, 2); if(WSAStartup(w. Version. Requested, &wsa. Data)!=0) { //Winsock初始化错误 return; } if(wsa. Data. w. Version!=w. Version. Requested) { //Winsock版本不匹配 WSACleanup(); return; }//说明Winsock. DLL正确加载,可以执行以下代码

bind()实例 #include <Winsock 2. h> SOCKET s; sockaddr_in tcpaddr; int i. Sock. Err; int

bind()实例 #include <Winsock 2. h> SOCKET s; sockaddr_in tcpaddr; int i. Sock. Err; int port=5000; //端口号 s=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); tcpaddr. sin_family=AF_INET; tcpaddr. sin_port=htons(port); tcpaddr. sin_addr. s_addr=htonl(INADDR_ANY); if(bind(s, (LPSOCKADDR)&tcpaddr, sizeof(tcpaddr))==SOCKET_ERROR){ i. Sock. Err=WSAGet. Last. Error(); //根据不同的错误类型进行不同的处理 return; } 函数调用成功,进行其他处理。

在无连接套接口上发送数据-sendto() ü 对于无连接的套接口来说,要从套接口上发送 一个数据报,就要使用sendto()函数 int sendto( SOCKET s, const char FAR * buf, int

在无连接套接口上发送数据-sendto() ü 对于无连接的套接口来说,要从套接口上发送 一个数据报,就要使用sendto()函数 int sendto( SOCKET s, const char FAR * buf, int len, int flags, const struct sockaddr FAR * to, int tolen );

The End

The End