Windows Socket和Linux Socket编程的区别 ZZ

socket相关程序从Windows移植到Linux下需要注意的:

1)头文件
Windows下winsock.h/winsock2.h
Linux下sys/socket.h
错误处理:errno.h

2)初始化
Windows下需要用WSAStartup
Linux下不需要

3)关闭socket

Windows下closesocket(...)
Linux下close(...)

4)类型
Windows下SOCKET
Linux下int
如我用到的一些宏:
#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

5)获取错误码
Windows下getlasterror()/WSAGetLastError()
Linux下errno变量

6)设置非阻塞
Windows下ioctlsocket()
Linux下fcntl() <fcntl.h>

7)send函数最后一个参数
Windows下一般设置为0
Linux下最好设置为MSG_NOSIGNAL,如果不设置,在发送出错后有可 能会导致程序退出。

8)毫秒级时间获取
Windows下GetTickCount()
Linux下gettimeofday()

3、多线程
多线程: (win)process.h --〉(Linux)pthread.h
_beginthread --> pthread_create
_endthread --> pthread_exit

一、linux下的socket编程:

1、客户端执行步骤依次如下:

socket()

connect()

send()或者recv()

close()

注意的是,connect之前要填充地址结构体,IP地址转换为网络字节序,一般用inet_aton().

2、服务器端:

socket()

bind()

listen()

accpet()

recv()或者send()

close()

(ps:一般通过将send()和recv()的最后一个参数赋为0或者1来区分阻塞与非阻塞,其中0对应阻塞,1对应非阻塞)

二、windows下的网络编程:

做过windows网络编程的人都知道,微软的MFC把复杂的WinSock API函数封装到类里,这使得编写网络应用程序更容易。即windows既提供上层的网络API函数也提供底层的API函数。

1、对于采用上层的API函数而言:若采用csocket类定义一个对象obj的话,那么进行网络编程的步骤如下:

客户端:

obj.Create()

obj.Connect()

obj.Receive()或者obj.Send()

obj.Close()

服务器端:

先调用AfxSocketInit()检测协议栈安装情况

obj.Create()

obj.Listen()

obj.Accpet()

obj.Receive()或者obj.Send()

obj.Close()

2、对于采用底层的API函数而言,步骤如下:

客户端:

WSAStartup()

socket()

connect()

send()或者recv()

closesocket()

服务器端:

WSAStartup()
socket()
bind()
listen()
accpet()
send()
recv()
closesocket()

(ps:windows下CSocket类为同步方式,有阻塞现象;CASyncSocket为异步方式,无阻塞现象。)

通过以上比较可以发现:linux下的网络编程与windows下采用底层的API类似,但是也有区别:

区别一:windows下需加上WSAStartup()函数

区别二:关闭socket:linux为close(),windows为closesocket()

windows下采用上层的API,一般有CSocket和CAsynSocket这两种类型的类

这种情况以下socket函数一般的首字母大写。而底层的API不管是windows下的还是linux下的socket函数首字母都是小写的。

原文链接:http://www.linuxidc.com/Linux/2011-03/33324p2.htm

http://www.cnblogs.com/lcryby/articles/2227440.html

时间: 2025-01-05 02:05:30

Windows Socket和Linux Socket编程的区别 ZZ的相关文章

【转】Windows Socket和Linux Socket编程有什么区别

socket相关程序从Windows移植到Linux下需要注意的: 1)头文件 Windows下winsock.h/winsock2.h Linux下sys/socket.h 错误处理:errno.h 2)初始化 Windows下需要用WSAStartup Linux下不需要 3)关闭socket Windows下closesocket(...) Linux下close(...) 4)类型 Windows下SOCKET Linux下int 如我用到的一些宏: #ifdef WIN32 typed

golang socket与Linux socket比较分析

在posix标准推出后,socket在各大主流OS平台上都得到了很好的支持.而Golang是自带runtime的跨平台编程语言,Go中提供给开发者的socket API是建立在操作系统原生socket接口之上的.但golang 中的socket接口在行为特点与操作系统原生接口有一些不同.本文将对结合一个简单的hello/hi的网络聊天程序加以分析. 一.socket简介 首先进程之间可以进行通信的前提是进程可以被唯一标识,在本地通信时可以使用PID唯一标识,而在网络中这种方法不可行,我们可以通过

linux socket编程系统调用栈

目录 一.网络协议参考模型简介 二.SOCKET概述 三.SOCKET基本数据结构 1.TCP通信编程 2.服务器端实例代码 3.客户端实例代码 4.头文件socketwrapper.h 5.程序实现功能 6.探究socket系统调用 @(linux socket编程实现原理) 一.网络协议参考模型简介 国际标准组织(ISO)制定了OSI模型.这个模型把网络通信的工作分为7层,从上至下为应用层.表示层.会话层. 传输层.网络层.数据链路层.物理层. 而TCP/IP协议将OSI的7层模型简化为4层

Windows下与Linux下编写socket程序的区别 《转载》

原文网址:http://blog.chinaunix.net/uid-2270658-id-308160.html [[Windows]] [Windows: 头文件的区别] #include<winsock.h>#include<winsock2.h> [Windows: 初始化的区别] WSADATA wsaData;WSAStartup(0x202,&wsaData); [Windows: 声明Socket] SOCKET类型 [Windows: Socket关闭]c

嵌入式 Linux网络编程(一)——Socket网络编程基础

嵌入式 Linux网络编程一--Socket网络编程基础 一.Socket简介 1.网络中进程间通信 本机进程使用进程号区别不同的进程进程间通信方式有管道.信号.消息队列.共享内存.信号量等.网络中进程间的通信首先需要识别进程所在主机在网络中的唯一标识即网络层的IP地址主机上的进程可以通过传输层的协议与端口号识别. 2.Socket原理 Socket是应用层与TCP/IP协议族通信的中间软件抽象层是一种编程接口.Socket屏蔽了不同网络协议的差异支持面向连接(Transmission Cont

小练习:用socket实现Linux和Windows之间的通信

在日常生活中,绝大部分人使用的机器一般是windows系统,但是对于研发人员,开发.编译等工作往往是建立在linux机器上.事实上,在服务器方面,Linux.UNIX和WindowsServer占据了市场的大部分份额:在超级计算机方面,Linux取代Unix成为了第一大操作系统. 通信是计算机和操作系统的一大任务,通过ftp.ping.ssh等方式,人们可以很方便与服务器连接.一个庞大的网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket.windows系统使

Linux Socket编程-(转自吴秦(Tyler))

"一切皆Socket!" 话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的socket. --有感于实际编程和开源项目研究. 我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠socket?那什么是socket?socket的类型有哪些?还有socket的基本函数,这些都是本文想介绍的.本文的主要内容如下: 1.网络中进程之间如何通信?

linux网络环境下socket套接字编程(UDP文件传输)

今天我们来介绍一下在linux网络环境下使用socket套接字实现两个进程下文件的上传,下载,和退出操作! 在socket套接字编程中,我们当然可以基于TCP的传输协议来进行传输,但是在文件的传输中,如果我们使用TCP传输,会造成传输速度较慢的情况,所以我们在进行文件传输的过程中,最好要使用UDP传输. 在其中,我们需要写两个程序,一个客户端,一个服务端,在一个终端中,先运行服务端,在运行客户端,在服务端和客户端都输入IP地址和端口号,注意服务端和客户端的端口号要相同,然后选择功能,在linux

linux网络编程-(socket套接字编程UDP传输)

今天我们来介绍一下在linux网络环境下使用socket套接字实现两个进程下文件的上传,下载,和退出操作! 在socket套接字编程中,我们当然可以基于TCP的传输协议来进行传输,但是在文件的传输中,如果我们使用TCP传输,会造成传输速度较慢的情况,所以我们在进行文件传输的过程中,最好要使用UDP传输. 在其中,我们需要写两个程序,一个客户端,一个服务端,在一个终端中,先运行服务端,在运行客户端,在服务端和客户端都输入IP地址和端口号,注意服务端和客户端的端口号要相同,然后选择功能,在linux