Welcome 微信登录

首页 / 操作系统 / Linux / Windows Socket和Linux Socket编程有什么区别

这个问题问得好大哦。。。
SOCKET在原理上应该是一样的,只是不同系统的运行机置有些不同。Socket 编程 Windows到Linux代码移植遇到的问题 1、一些常用函数的移植 1、在 Linux 实现 Win32 API 之 GetTickCount 函数

为了将 Windows 中的  GetTickCount API 函数移植到 Linux,可以使用如下的代码:long GetTickCount(){tms tm;return times(&tm);}2、Windows 和 Linux 系统关于 itoa 的移植问题

大家知道,在将 Windows 的 STL 代码移植到 Linux 系统时,由于 Linux 系统中 STL 没有实现默认的 itoa 函数,因此 itoa 在 Linux 中无法正常工作。要是在 GCC 命令行禁用 STL 的话,那么代码里就无法使用 STL,从而丢失可移植性。这里给出一个 简单可行的解决方法,以便你碰到这种情况时顺利进行从 Windows 到 Linux 的移植:#if defined(__linux__)#define _itoa itoachar* itoa(int value, char*str, int radix){intrem = 0;intpos = 0;char ch= ""!"" ;do{rem= value % radix ;value /= radix;if ( 16 == radix ){if( rem >= 10 && rem <= 15 ){switch( rem ){case 10:ch = ""a"" ;break;case 11:ch =""b"" ;break;case 12:ch = ""c"" ;break;case 13:ch =""d"" ;break;case 14:ch = ""e"" ;break;case 15:ch =""f"" ;break;}}}if( ""!"" == ch ){str[pos++] = (char) ( rem + 0x30 );}else{str[pos++] = ch ;}}while( value != 0 );str[pos] = """" ;return strrev(str);}#endif3、Windows 到 Linux 关于 __strrev 的移植问题

因为在 Linux 系统中没有 __strrev 函数,那么将 Windows 代码移植到 Linux 系统时会有问题,本文下面描述一个技巧,在 Linux 中提供一个替代 __strrev 函数的方法。这里提供两个单独的实现:一个是普通的 char* C 函数使用的 __strrev 标准实现,另一个是针对 STL 的实现。两者的输入和输出仍然都是 char*。//// strrev 标准版//#if !defined(__linux__)#define __strrev strrev#endifchar* strrev(char* szT){if ( !szT ) // 处理传入的空串.return "";int i = strlen(szT);int t = !(i%2)? 1 : 0;// 检查串长度.for(int j = i-1 , k = 0 ; j > (i/2 -t) ; j-- ){char ch= szT[j];szT[j] = szT[k];szT[k++] = ch;}return szT;}//// strrev 针对 STL 的版本.//char* strrev(char* szT){string s(szT);reverse(s.begin(), s.end());strncpy(szT, s.c_str(), s.size());szT[s.size()+1] = """";return szT;4、实现 Sleep 函数从 Windows 到 Linux 的移植

假设你有一些在 Windows 环境编写的代码,你想让它们在 Linux 环境下运行,条件是要保持对原有 API署名的调用。比如在 Windows 中有 Sleep,而在 Linux 中对应的函数是 usleep,那么如何保持原有的函数名称调用呢?下面给出一段代码例子:void Sleep(unsigned int useconds ){// 1 毫秒(milisecond) = 1000 微秒 (microsecond).// Windows 的 Sleep 使用毫秒(miliseconds)// Linux 的 usleep 使用微秒(microsecond)// 由于原来的代码是在 Windows 中使用的,所以参数要有一个毫秒到微秒的转换。usleep( useconds * 1000 );}