什么是windows sockets,Windows socket
Windows套接字和Linux套接字编程有什么区别-lcryby-Blog Park
Windows socket和Linux Socket编程有什么区别?Socket相关的程序应该从Windows移植到Linux
1)头文件
Windows下的Winsock.h/winsock2.h
Linux下的Sys/socket.h
错误处理:错误号h
2)初始化
Windows下需要WSAStartup。
Linux下不需要
3)关闭插座
Windows closesocket(.)
关闭(.)在Linux下
4)类型
Windows套接字
Linux下的Int
例如,我使用的一些宏:
#ifdef WIN32
typedef int socklen _ t;
typedef int ssize _ t;
#endif
#ifdef __Linux__
typedef int套接字;
typedef无符号字符字节;
typedef无符号长DWORD
#定义假0
#define套接字错误(-1)
#endif
5)获取错误代码
windows getlasterror()/WSAGetLastError()
Linux下的Errno变量
6)设置非阻塞
Windows ioctlsocket()
在Linux下fcntl() fcntl.h
7)发送函数的最后一个参数
Windows通常设置为0。
在Linux下,最好设置为MSG_NOSIGNAL。如果未设置,可能会导致程序在发送错误后退出。
8)毫秒时间采集
Windows下的GetTickCount()
Linux下的Gettimeofday()
3.多线程
多线程:(Win)process . h-->(Linux)pthread . h
_beginthread - pthread_create
_endthread - pthread_exit
1.linux下的套接字编程;
1.客户端的执行步骤如下:
插座()
连接()
发送()或接收()
关闭()
注意在connect之前要填充地址结构,将IP地址转换成网络字节顺序,一般使用inet_aton()。
2.服务器端:
插座()
绑定()
听()
accpet()
Recv()或send()
关闭()
(ps:一般将send()和recv()的最后一个参数赋值为0或1,以区分阻塞和非阻塞,其中0对应阻塞,1对应非阻塞)
二、windows下的网络编程:
做过windows网络编程的人都知道,微软MFC把复杂的WinSock API函数封装成类,这样更容易写网络应用。也就是说,windows提供了上层网络API函数和下层API函数。
1.对于使用上层API函数:如果使用csocket类定义一个对象obj,那么网络编程的步骤如下:
客户:
obj。创建()
obj。连接()
Obj。Receive()或obj。发送()
obj。关闭()
服务器端:
首先调用AfxSocketInit()来检测协议栈的安装。
obj。创建()
obj。听()
obj。Accpet()
Obj。Receive()或obj。发送()
obj。关闭()
2.采用底层API函数的步骤如下:
客户:
WSAStartup()
插座()
连接()
发送()或接收()
closesocket()
服务器端:
WSAStartup()
插座()
绑定()
听()
accpet()
发送()
接收()
closesocket()
(PS:PS:windows下的CSocket类是同步模式,有阻塞现象;CASyncSocket是异步的,没有阻塞现象。)
通过以上对比可以发现,linux下的网络编程和windows下的底层API类似,但也有区别:
一个区别:WSAStartup()函数要加在windows下。
两个区别:closesocket:Linux中的close()和Windows中的close socket()。
Windows采用上层API,一般有两类:CSocket和CAsynSocket。
在这种情况下,下面的套接字函数的第一个字母是大写的。但是底层API中socket函数的首字母是小写的,无论是windows下还是linux下。
原文链接:http://www.linuxidc.com/Linux/2011-03/33324p2.htm
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。