笔记
复习基础的C/S socket 模型,细节函数忘记了所有又找了半天才找到。记录在这里。
服务器端的bind函数
struct sockaddr_in servSocket;
servSocket.sin_family = AF_INET;
servSocket.sin_port = htons(12345);
servSocket.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
err = bind(sock, (struct sockaddr*)&servSocket, sizeof(servSocket));
1.htons- the htons function converts a u_short from host to TCP/IP network byte order(which is big-endian)
2.inet_addr- the inet_addr function convers a string containing IPv4 dotted-decimal into a proper address for the IN_ADDR struct
在accept之后函数已经填充好了来自客户端的所有信息比如客户端端IP和PORT
AcceptSocket = accept(sock, (struct sockaddr*)&ClientSocket, &len);
//caddr = inet_ntoa ( ClientSocket.sin_addr);
char* c1addr;
c1addr = inet_ntoa(ClientSocket.sin_addr);
int cPort;
cPort=ntohs(ClientSocket.sin_port)
3. ntohs - the ntohs function converts a u_short from TCP/IP network byte order to host byte order(which is little-endian on Intel processors)
4. getpeername - the getpeername function retrieves the address of the peer to which a socket is connected.
这个在select模型的时候很有用我们可以通过它得到连接的客户端的地址和端口等信息。也就是说在select模型的时候我们accept的时候后两个参数写成NULL这样在需要的时候通过socket来得到相应的客户端地址
5.SetConsoleCtrlHandler function- Adds or removes an application-defined HandlerRoutine function from the list of handler functions for the calling process;反正意思就是定义一个回调函数。