1. 头文件

windows下winsock.h或winsock2.h
linux下netinet/in.h(大部分都在这儿),unistd.h(close函数在这儿),sys/socket.h(在in.h里已经包含了,可以省了)

2. 初始化

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

3. 关闭socket

windows下closesocket(...)
linux下close(...)

4. 类型

windows下SOCKET
linux下int(我喜欢用long,这样保证是4byte,因为-1我总喜欢写成0xFFFF)

5. 获取错误码

windows下getlasterror()/WSAGetLastError()
linux下,未能成功执行的socket操作会返回-1;如果包含了errno.h,就会设置errno变量

6. 设置非阻塞

windows下ioctlsocket()
linux下fcntl(),需要头文件fcntl.h

7. send函数最后一个参数

windows下一般设置为0
linux下最好设置为MSG_NOSIGNAL,如果不设置,在发送出错后有可能会导致程序退出

8. 毫秒级时间获取

windows下GetTickCount()
linux下gettimeofday()

9. 多线程

windows下包含process.h,使用_beginthread和_endthread
linux下包含pthread.h,使用pthread_create和pthread_exit

10. 用IP定义一个地址(sockaddr_in的结构的区别)

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

11. 异常处理

linux下当连接断开,还发数据的时候,不仅send()的返回值会有反映,而且还会像系统发送一个异常消息,如果不作处理,系统会出BrokePipe,程序会退出。为此,send()函数的最后一个参数可以设MSG_NOSIGNAL,禁止send()函数向系统发送异常消息。

转载于:https://www.cnblogs.com/songhexiang/p/6682247.html

windows下linux下socket编程区别相关推荐

  1. java socket windows linux,socket在windows下和linux下的区别

    windows到Linux代码移植遇到的问题 1.一些常用函数的移植http://www.vckbase.com/document/viewdoc/?id=1586 2.网络------转载& ...

  2. linux下的c socket编程(4)--server端的继续研究

    linux下的C socket编程(4) 延长server的生命周期: 在前面的一个个例子中,server在处理完一个链接之后便会立即结束掉自己,然而这种server并不科学,server因该使能够一 ...

  3. linux设置send时间,[转]Socket 的send,recv在windows与linux下的超时设置

    从昨天到今天一真在搞这个网络断线检测的问题,一直没搞好,网上大多都说用ping 可以搞定,不过我就是搞不定,没办法之下想了个不是办法的办法,在 服务器上开了一个 UDP端口,监听数据,然后回发,不用T ...

  4. linux 中query exp日期相关,Oracle exp query条件检索在Windows和Linux下的命令区别

    天因为业务需要,运行了EXP的条件导出,发现WINDOWS和LINUX下有些差别,主要区别在于敏感字符,实例如下: LINUX: exp us/pass TABLES=\(t_ec_event\) f ...

  5. Windows、Linux下安装Maven图文教程

    文章目录 一.前言 二.Maven到底是什么? 三.Windows下安装 1.前提 2.下载 3.配置Maven环境变量 4.检查Maven版本 5.安装好以后的几点注意 6.IDEA中修改Maven ...

  6. python在windows和linux_python在windows和linux下获得本机本地ip地址方法小结

    本文实例总结了python在windows和linux下获得本机本地ip地址方法.分享给大家供大家参考.具体分析如下: python的socket包含了丰富的函数和方法可以获得本机的ip地址信息,so ...

  7. 解决Windows下Arm下Linux下Qt4程序的中文乱码问题

    解决Windows下Arm下Linux下Qt4程序的中文乱码问题 ################################################################### ...

  8. 性能测试入门(六)windows及Linux下做压力测试的注册表设置

    windows及Linux下做压力测试的注册表设置 from: http://www.cnblogs.com/tianzhiliang/articles/2400176.html TcpTimedWa ...

  9. YOLOv4:目标检测(windows和Linux下Darknet 版本)实施

    YOLOv4:目标检测(windows和Linux下Darknet 版本)实施 YOLOv4 - Neural Networks for Object Detection (Windows and L ...

  10. windows增量到linux,Beyond Compare 3在windows和linux下实现提取增量包

    需求:要实现在windows或linux下的自动对比打得WAR包,进行增量发布(缺点就是只能增量部署增加的和修改的,对删除的不能进行减量部署) 具体实现:利用Beyond Compare 3来实现,功 ...

最新文章

  1. bash shell while语法
  2. 2.7 查阅文档 3.1 线性回归
  3. python文件打开模式中、使用w模式、文件指针指向_被python文件模式“w+”所迷惑
  4. 扩展Guava缓存溢出到磁盘
  5. [POJ1463] Strategic game
  6. XmlDocument类
  7. pandas python groupby_python – pandas groupby方法实际上是如何工作的?
  8. dispatcherServlet流程图
  9. C++处理有道单词导出单词本
  10. 人口logistic模型公式_MATLAB做logistics人口模型,求出值有问题
  11. 不清楚Word如何批量转PDF?快来跟我学这两个妙招
  12. Android App Bundle 和Unity AAB BundleTools
  13. Linux iperf 用法介绍
  14. 自动创建文件夹 pictureBox 显示图片 并调用系统窗体打开文件夹
  15. 医疗器械答疑解惑篇之二
  16. pytorch入门笔记
  17. 二维火收银系统服务器超时,小店难开,二维火收银告诉你“再小的店也可以拥有智慧收银系统”!...
  18. 4G编码器在移动户外直播推流解决方案
  19. SRPG游戏开发(五十六)第十一章 地图动作与地图事件 - 五 移动、攻击与待机(Move, Attack and Holding)
  20. 基于微信小程序的短视频系统

热门文章

  1. Windows系统单网卡配置双IP双网关
  2. 黑客都是使用哪些方法入侵我们电脑的
  3. 宽带和流量是分开的吗_宽带
  4. sql full left right inner cross 基础
  5. 安装mysql时报错:计算机中丢失VCRUNTIME140_1.dll,亲测有效
  6. Eclipse 汉化包下载安装
  7. spring boot 支持多少人在线_通过 spring-boot-starter-hbase 集成 HBase
  8. MASQUERADE
  9. 已修复的bug: 简书文章长标题换行异常,标题配图异常,首页配图异常
  10. 未解决的问题记录——关于easyui中datagrid的冻结列右侧冻结