wordpress 站标不显示,高端建筑设计公司,四川城乡和建设厅网站,广州安全教育平台入口登录官网关于这个话题网上流传的是一个相同的版本#xff0c;就是那个第一项是头文件的区别#xff0c;但后面列出的头文件只有#include没有#xff08;估计是原版的在不断转载的过程中有人不小心忘了把尖括号转义#xff0c;让浏览器当html标记解析没了#xff09;的那个。现在整…关于这个话题网上流传的是一个相同的版本就是那个第一项是头文件的区别但后面列出的头文件只有#include没有估计是原版的在不断转载的过程中有人不小心忘了把尖括号转义让浏览器当html标记解析没了的那个。现在整理了一下以后也会不断补充内容。
1)头文件 Windows下winsock.h或winsock2.h Linux下netinet/in.h大部分都在这儿unistd.hclose函数在这儿sys/socket.h在in.h里已经包含了可以省了
2)初始化 Windows下需要用WSAStartup启动Ws2_32.lib并且要用#pragma comment(lib,Ws2_32)来告知编译器链接该lib。 Linux下不需要
3)关闭socket Windows下closesocket(...) Linux下close(...)
4)类型 Windows下SOCKET Linux下int我喜欢用long这样保证是4byte因为-1我总喜欢写成0xFFFF
5)获取错误码 Windows下getlasterror()/WSAGetLastError() Linux下未能成功执行的socket操作会返回-1如果包含了errno.h就会设置errno变量
6)设置非阻塞 Windows下ioctlsocket() Linux下fcntl()需要头文件fcntl.h
7)send函数最后一个参数 Windows下一般设置为0 Linux下最好设置为MSG_NOSIGNAL如果不设置在发送出错后有可能会导致程序退出
8)毫秒级时间获取 Windows下GetTickCount() Linux下gettimeofday()
9)多线程 Windows下包含process.h使用_beginthread和_endthread Linux下包含pthread.h使用pthread_create和pthread_exit
10)用IP定义一个地址sockaddr_in的结构的区别 Windows下addr_var.sin_addr.S_un.S_addr Linux下addr_var.sin_addr.s_addr 而且Winsock里最后那个32bit的S_addr也有几个以联合Union的形式与它共享内存空间的成员变量便于以其他方式赋值而Linux的Socket没有这个联合就是一个32bit的s_addr。遇到那种得到了是4个char的IP的形式比如127一个0一个0一个和1一个共四个charWinSock可以直接用4个S_b来赋值到S_addr里而在Linux下可以用边向左移位一下8bit共四下边相加的方法赋值。
11)异常处理 Linux下当连接断开还发数据的时候不仅send()的返回值会有反映而且还会像系统发送一个异常消息如果不作处理系统会出BrokePipe程序会退出。为此send()函数的最后一个参数可以设MSG_NOSIGNAL禁止send()函数向系统发送异常消息。 我用 winsock 代替
#ifdef _WIN32 #include windows.h #include winsock2.h #include gdk/gdkwin32.h #else #include sys/socket.h #include netinet/in.h #include netinet/tcp.h #include netdb.h #include arpa/inet.h #endif ...... #ifdef _WIN32 if(WSAStartup(MAKEWORD(2,2),wsaData) ! 0) { printf(WSAStartup()fail:%ld\n,GetLastError()); exit(-1); } #endif ...... #ifdef _WIN32 sd accept (listen_sd, (struct sockaddr*)sa_cli, client_len); #else sd accept (listen_sd, (struct sockaddr*)sa_cli, (socklen_t*)client_len); #endif ...... ret_tmp recv(a_server_sd, (char*)ctrl_info, sizeof(ctrl_info), 0 /*MSG_WAITALL*/); ...... ret_tmp send(a_server_sd, (char*)ctrl_info, sizeof(ctrl_info), 0); 要用几句条件编译。