Windows Socket和Linux Socket编程的区别
来源:互联网 发布:巨人网络招聘网申时间 编辑:程序博客网 时间:2024/05/16 14:02
SOCKET在原理上应该是一样的,只是不同系统的运行机置有些不同。
Socket 编程 windows到Linux代码移植遇到的问题
1、一些常用函数的移植
http://www.vckbase.com/document/viewdoc/?id=1586
2、网络
socket相关程序从windows移植到linux下需要注意的
windows下winsock.h/winsock2.h
linux下sys/socket.h
错误处理:errno.h
其他常用函数的头文件可到命令行下用man指令查询。
2)初始化
windows下需要用WSAStartup
linux下不需要(很方便),直接可以使用
3)关闭socket
windows下closesocket(...)
linux下close(...)
4)类型
windows下SOCKET
在linux下为int类型
5)绑定地址的结构体
名称相同,都是struct sockaddr、struct sockaddr_in,这两者通常转换使用;
在Windows下面名称都是大写,而在Linux下为小写
常用:
Linux下:
sockaddr_in destAddr;
destAdd.sin_family=AF_INET;
destAddr.sin_port=htons(2030);
destAddr.sin_addr.s_addr=inet_addr("192.168.1.1");
Windows下:
SOCKADDR_IN destAddr;
destAddr.sin_addr.S_un.S_addr=inet_addr("192.168.1.1");
但结构体中成员的名称不同
Windows中结构体成员
struct sockaddr_in { short sin_family; u_short sin_port; struct in_addr sin_addr; char sin_zero[8];};
struct sockaddr { u_short sa_family; char sa_data[14];};
struct in_addr { union { struct { u_char s_b1,s_b2,s_b3,s_b4; } S_un_b; struct { u_short s_w1,s_w2; } S_un_w; u_long S_addr; } S_un;};
下面的一些宏可以使windows下的程序移植到linux下(通过类型的重新定义,使代码具有linux和windows下的移植性)
- #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
- #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
windows下ioctlsocket()
linux下fcntl() <fcntl.h>
8)send函数最后一个参数
windows下一般设置为0
linux下最好设置为MSG_NOSIGNAL,如果不设置,在发送出错后有可 能会导致程序退出。
9)毫秒级时间获取
windows下GetTickCount()
linux下gettimeofday()
10)数据类型的一些转化
小端到大端(网络协议使用)的转换:htonl, htons
点分十进制IP和整数之间的相互转换:inet_addr()(该函数将点分十进制转为整数),inet_aton(),inet_ntoa(),inet_pton()(linux下独有 该函数可以实现相互之间的转换)
使用到的头文件不相同,linux下用man命令查询。
linux下使用的套接字为伯克利套接字,因此在select()函数的使用上(第一个参数的设置)也有区别;
windows下为了与伯克利套接字匹配,第一个参数是无所谓,一般可设为0;
int maxfdp是一个整数值,是指集合中所有文件描述符的范围,即所有文件描述符的最大值加1,不能错!
多线程: (win)process.h --〉(linux)pthread.h
_beginthread --> pthread_create
_endthread --> pthread_exit
- Linux 和 Windows Socket编程的区别
- Windows Socket和Linux Socket编程的区别
- Windows Socket和Linux Socket编程的区别
- windows Socket和Linux Socket编程的区别
- Windows Socket和Linux Socket编程的区别
- Windows Socket和Linux Socket编程的区别
- Windows Socket和Linux Socket编程的区别
- Windows Socket和Linux Socket编程的区别
- Windows Socket和Linux Socket编程有什么区别
- socket编程在windows和linux下的区别
- socket编程在windows和linux下的区别
- socket编程在windows和linux下的区别
- Linux和windows下socket编程的一点区别
- 【转】socket编程在windows和linux下的区别
- linux和windows下socket编程的一点区别
- Windows 与 Linux Socket 编程的区别
- windows socket编程和linux socket编程的异同
- Socket Linux和Windows下的区别
- Android手机控制树莓派制作的四驱小车
- HDU ACM 1085 Holding Bin-Laden Captive! 母函数?
- Lua 入门学习笔记
- LayoutParams的用法
- android 自定义ImageView实现图片缩放边界回弹和缩小回弹
- Windows Socket和Linux Socket编程的区别
- iOS 代码实现自动布局(Auto Layout)第三方库
- 奔三之际,任性一把
- Android 读取手机某个文件夹目录及子文件夹中所有的txt文件
- float陷阱
- 关于报错ld: symbol(s) not found for architecture x86_64不是代码问题
- 亚信科技笔试题
- hdu 1978 How many ways(记忆化搜索dp)
- lua 命令行方式