什么是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

什么是windows sockets,Windows socket