参考文章:传送门
项目 | Windows | Linux |
主要头文件 | winsock.h/winsock2.h | sys/socket.h fcntl.h errno.h |
链接库 | ws2_32.dll/lib | 连接是使用参数:-lstdc 运行时需要libstdc++.so.5,可在/usr/lib目录中创建一个链接。 |
初始化及退出 | 初始化需要调用WSAStartup,退出需调用WSACleanup | 无 |
关闭Socket | closesocket | 与文件操作相同close |
Socket类型 | SOCKET | 与文件句柄相同int |
错误查看 | WSAGetLastError | 全局变量errno |
设置非阻塞模式 | int i=1 ioctlsocket(sockethandle,FIONBIO,&i) | fcntl(ockethandle,F_SETFL, O_NONBLOCK) |
connect非阻塞 | 返回WSAEWOULDBLOCK | EINPROGRESS |
send/recv函数最后一个参数 | 一般设置为0 | 可以有多种组合:MSG_NOSIGNAL,MSG_DONTWAIT,MSG_WAITALL |
send的异常 | 当连接断开,还发数据的时候,不仅send()的返回值会有反映,而且还会像系统发送一个异常消息,如果不作处理,程序会退 出。为此,send()函数的最后一个参数可以设置MSG_NOSIGNAL,禁止send()函数向系统发送异常消息。 | |
WSA宏 | 除了可以使用标准的socket函数外,微软自己有许多以WSA开始的函数,作为对标准socket函数的封装(可能微软感觉这些函数更好用一些吧) | |
select非阻塞 | 第一个参数无效 直接时返回0 | 第一个参数表示描述符范围 一般使用描述符+1 超时时返回0 |
线程相关 | process.h _beginthread, _endthread,GetCurrentThreadId | pthread.h pthread_create,pthread_exit,pthread_self |
进程同步互斥量 | 类型void * CreateMutexA,CloseHandle,WaitForSingleObject,ReleaseMutex | 类型pthread_mutex_t pthread_mutex_init,pthread_mutex_destroy,pthread_mutex_lock,pthread_mutex_trylock,pthread_mutex_unlock |
以下附上源码下载地址
环境:windows7+VS2008 Ubuntu14.10+gcc4.9
源码下载:点击下载源码
注:源码实例中只实现了客户端实例,DemoHost是个简单的服务器端只接受1个请求。