将socket程序从linux移植到windows上

今天突然想试下纯socket编程在两个系统上代码重合量有多大,只要不使用VC自定义的宏(比如SOCKET、SOCKADDR等等)感觉代码重合量挺大的。

比如最简单的TCP客户端和服务端对话,在VC中用int取代SOCKET宏,用struct sockaddr_in取代SOCKADDR_IN宏。

然后区别就仅仅是头文件和windows额外加载/关闭套接字库的代码了。

// Unix/Linux#include <sys/socket.h>
#include <netinet/in.h> // sockaddr_in
#include <arpa/inet.h>  // inet_pton

int main(int argc, char* argv[])
{
    // TODO: 通用代码
}
// Windows#include <WinSock2.h>
#include <WS2tcpip.h>

#pragma comment(lib, "Ws2_32.lib")

// windows上不直接支持close关闭文件描述符
#define close closesocket

// windows上需要额外加载和关闭socket库
#define LOAD_WIN_SOCK_LIB WSAData wsaData; if (WSAStartup(MAKEWORD(2, 1), &wsaData) != 0) 	err_quit("加载windows套接字库失败!"); if (LOBYTE(wsaData.wVersion) != 2 || 	HIBYTE(wsaData.wVersion) != 1) { 	WSACleanup(); 	err_quit("版本号初始化失败"); }

#define CLOSE_WIN_SOCK_LIB WSACleanup();

int main()
{
	LOAD_WIN_SOCK_LIB
	// TODO: 通用代码
	CLOSE_WIN_SOCK_LIB
}

上述两份代码忽略了其他头文件,全局变量的定义和最后的return 0;

err_quit是我直接用APUE的错误处理函数,换成fprintf+exit也可以。

如果只需要一份文件就使用跨平台宏定义了

#ifdef WIN32
// TODO: WINDOWS平台的特定代码
#else
// TODO: LINUX平台的特定代码
#endif

然并卵,说到底在windows上写只为了交作业,而且windows还提供了CAsyncSocket和CSocket等等,没必要执着于跨平台。

时间: 2024-08-02 06:41:50

将socket程序从linux移植到windows上的相关文章

rsync (windows 服务端,linux客户端)将windows上的数据同步到linux服务器,反之也可

一:总体概述. 1.windows上面首先装CW_rsync_Server.4.1.0_installer,安装时要输入的用户名密码要记住哦!接下来就是找到rsyncd.conf进入配置细节 2.linux上面只需要装rsync工具即可(yum provides */rsync找到rsync包进行安装即可) 二:细节配置. 1.默认在C:\Program Files (x86)\ICW\下的rsyncd.conf是主配置文件,密码文件一般放在/etc/下rsyncd.secrets 2.rsyn

Linux 入门学习-windows上使用VM安装LINUX

Linux基础入门之(系统安装) 虚拟机步骤 1.创建虚拟操作简介 文件--> 新建虚拟机---> 自定义-(高级)--> 硬件兼容性尽量选择最高---> 我以后安装操作系统--> 选择准备好的安装光盘--> 虚拟机命名和配置配置文件存放路径--> 根据自身的主机硬件来决定给虚拟机分配cpu的核心数--> 根据自身的主机硬件来决定给虚拟机分配占用多少物理内存--> 选择网络连接方式,推荐选择桥接后或者主机方式--> 选择I/O接口来配置设备接口-

将Linux代码移植到Windows的简单方法

将Linux代码移植到Windows的简单方法 一.前言 Linux拥有丰富各种源代码资源,但是大部分代码在Windows平台情况是无法正常编译的.Windows平台根本无法直接利用这些源代码资源.如果想要使用完整的代码,就要做移植工作.因为C/C++ Library的不同和其他的一些原因,移植C/C++代码是一项困难的工作.本文将以一个实际的例子(Tar)来说明如何把Linux代码移植到Windows平台上.移植过程将尽量少修改代码,以便代码的运行逻辑不会发生任何变动.保留绝大部分软件主要功能

一个复杂的Windows下的socket程序

上节演示了 Linux 下的 socket 程序,这节来看一下 Windows 下的 socket 程序.异样,server.cpp 为效劳器端代码,client 为客户端代码.效劳器端代码 server.cpp: #include <stdio.h> #include <winsock2.h> #pragma comment (lib, "ws2_32.lib") //加载 ws2_32.dll int main(){ //初始化 DLL WSADATA ws

TCP之Delay ACK在Linux和Windows上实现的异同-Linux的自适应ACK

关于TCP Delay ACK的概念我就不多说了,到处复制粘贴标准文献以及别人的文章只能让本文篇幅加长而降低被阅读完的欲望,再者这也不是什么论文,附录参考文献几乎很少有人去看,所以我把这些都略过了. 和风吹的干皮鞋,吹的断愁绪吗? 写完本文后的补充: 这段话是我写完本文后补上去的.本来我想把这篇文章控制在2000字以内,或者更少的,800-1000字以内,无奈还是说多了...今天心情非常好,因为我竟然在梦里把三亨利之战的细节搞清楚了,迄今,我觉得自己对于西洋史的认知更近了一步,可以说今天是一个里

vmware里面的linux怎么和windows相互传文件

我们常常遇到这样的问题.高版本号的vmware遇到低版本号的linux.使用起来就比較抠脚,比方低版本号的linux安装在高版本号的vmware里. 1.不能全屏显示虚拟机 2.每次切换出来.总要按一下Ctrl+Alt键 3.特别可恨的是不能直接互传文件 针对以上情况.本篇博客仅仅是针对第三个问题展开的,怎么将vmware里的linux和外面的window互传文件,方法非常多,有 1.建立共享文件夹 2.通过建立ftp,也就是把windows当做ftp的server 3.建立linux的tftp

写一个Windows上的守护进程(5)文件系统重定向

写一个Windows上的守护进程(5)文件系统重定向 在Windows上经常操作文件或注册表的同学可能知道,有“文件系统/注册表重定向”这么一回事.大致来说就是32位程序在64位的Windows上运行时,操作系统会把对System32文件夹的访问重定向到SysWow64下,把对HKEY_LOCAL_MACHINE\SOFTWARE的访问重定向到HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node下.当然不止这些路径和注册表.详情请查看MSDN:https://msdn.

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

OpenFastPath(2):原生态Linux Socket应用如何移植到OpenFastPath上?

版本信息: ODP(Open Data Plane): 1.19.0.2 OFP(Open Fast Path): 3.0.0 1.存在的问题 OpenFastPath作为一个开源的用户态TCP/IP协议栈,其对用户提供的Socket API,无论是宏定义.数据结构还是函数,均以OFP_开头.如下图所示: 1 int ofp_socket(int, int, int); 2 int ofp_socket_vrf(int, int, int, int); 3 int ofp_accept(int,