windowslinux
头文件winsock.h/winsock2.hsys/socket.h ,netinet/in.h,unistd.h,errno.h,
初始化

需要用WSAStartup启动Ws2_32.lib,并且要用#pragma comment(lib,"Ws2_32")来告知编译器链接该lib,

结束之后要WSAClean

不需要
关闭socketclosesocket(...)close(...)

类型

SOCKET

in

获取错误码 getlasterror()/WSAGetLastError() errno变量
设置非阻塞flag = 1;  
ioctlsocket (fd, FIONBIO, (unsigned long *) &flag);  
flag = fcntl (fd, F_GETFL);  
fcntl (fd, F_SETFL, flag | O_NONBLOCK);  
send函数最后一个参数一般设置为0最好设置为MSG_NOSIGNAL,如果不设置,在发送出错后有可 能会导致程序退出。
毫秒级时间获取GetTickCount()gettimeofday()
多线程

process.h ;

CreateThread/_beginthread;

_endthread;

pthread.h;

pthread_create;

pthread_exit;

sockaddr_in 结构addr_var.sin_addr.S_un.S_addr ,Winsock里最后那个32bit的S_addr也有几个以联合(Union)的形式与它共享内存空间的成员变量(便于以其他方式赋值)addr_var.sin_addr.s_addr , Linux的Socket没有这个联合,就是一个32bit的s_addr。遇到那种得到了是4个char的IP的形式(比如127一个,0一个,0一个 和1一个共四个char),WinSock可以直接用4个S_b来赋值到S_addr里,而在Linux下,可以用边向左移位(一下8bit,共四下)边 相加的方法赋值。
time_t 结构

windows中,time_t结构是64位的整形。

如果要在windows使time_t为32位无符号整形,可以加宏定义,_USE_32BIT_TIME_T。

Linux中,time_t结构是长整形。
 
sleepSleep的单位为毫秒。sleep的单位为秒。
snprintfWindows为_snprintfLinux为snprintf
   

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

如我用到的一些宏:

#ifdef WIN32

typedef int socklen_t;

typedef int ssize_t;

#endif

#ifdef __LINUX__

typedef int SOCKET;

typedef unsigned char BYTE;

typedef unsigned long DWORD;

#define FALSE 0

#define SOCKET_ERROR (-1)

#endif

 

Logo

更多推荐