Windows下与Linux下编写socket程序的区别

【Windows: 头文件的区别】

#include<winsock.h>
#include<winsock2.h>

【Windows: 初始化的区别】

WSADATA wsaData;
WSAStartup(0x202,&wsaData);

【Windows: 声明Socket】 
SOCKET类型

【Windows: Socket关闭】
closesocket()

【Windows: Socket操作错误返回值】 
SOCKET_ERROR

【Windows: 设置socket非阻塞】

ioctlsocket(server_socket,FIONBIO,&ul);

【Windows: WSA宏】 
WSA相关的操作

【Windows: Select()函数】 
Select()函数的第一个参数无效,写0就可以了。

【Windows: 编译连接】
Ws2_32.lib

【Windows: 错误捕捉】 
WSAGetLastError() 或者 GetLastError().

【Windows: 异常处理】 
没有对send()的异常处理,最后一个参数无效,写0就可以了。

【Windows: sockaddr_in结构】

addr_var.sin_addr.S_un.S_addr

Winsock里最后那个32bit的S_addr也有几个以联合(Union)的形式与它共享内存空间的成员变量(便于以其他方式赋值).
遇到那种得到了是4个char的IP的形式(比如127一个,0一个,0一个和1一个共四个char),WinSock可以直接用4个S_b来赋值到S_addr里.

【【Linux】】

【Linux: 头文件的区别】

#include <netinet/in.h> //大部分都在这儿
#include <unistd.h> // close函数在这儿
#include <sys/socket.h> // 在in.h里已经包含了,可以省了
#include <errno.h> // 错误处理
#include <sys/types.h> // 系统类型定义

【Linux: 初始化的区别】 
啥都不用做

【Linux: 声明Socket】
SOCKET类型在Linux中没有定义,直接用int即可。

【Linux: Socket关闭】 
close()

【Linux: Socket操作错误返回值】 
在Linux中没有定义,判断socket操作是否成功可用返回值是否为-1即可,可将SOCKET_ERROR声明为-1。

【Linux: 设置socket非阻塞】 
ioctlsocket在Linux中没有定义,用fcntl替代即可,但要包含fcntl.h头文件。

#include<fcntl.h>
fcntl(server_socket,F_SETFL, O_NONBLOCK);

 

【Linux: WSA宏】 
WSA相关的操作在Linux不必要,直接去掉即可。

【Linux: Select()函数】 
Select()函数的第一个参数必须是后几个参数用到的socket中,值最大的数(整型)加1。

【Linux: 编译连接】 
连接是使用参数:-lstdc
运行时需要libstdc++.so.5,可在/usr/lib目录中创建一个链接。

【Linux: 错误捕捉】

#include <errno.h>
extern int errno;
int geterror(){return errno;}

 

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

【Linux: sockaddr_in结构】

addr_var.sin_addr.s_addr
Linux的Socket没有这个联合,就是一个32bit的s_addr。
遇到那种得到了是4个char的IP的形式(比如127一个,0一个,0一个和1一个共四个char),在Linux下,可以用边向左移位(一下8bit,共四下)边相加的方法赋值。

时间: 2024-09-22 08:28:59

Windows下与Linux下编写socket程序的区别的相关文章

grep-windows下类似linux下搜索命令

问题描述 windows下类似linux下搜索命令 想问一下如何在windows下有没有类似linux下的"find "+url+" | xargs grep "+keyWords的命令, 就是在指定路径下通过关键字搜索返回含有关键字的文件. 解决方案 写个批处理留着,类似http://wenku.baidu.com/link?url=KC_AB4vCJ85JbBT0EJFYwzQOvuqmDdATAOVwv85raC_q6N0-CXd9d7pk3n3yz1pobh

unix下编写socket程序的一般步骤

在unix下写socket程序可能是最方便,你只要掌握其一般步骤,就可以松的写出面向传输层的应用. 1.理解几个常用的socket函数 #include #include int socket(int domain,int type,int portocol); domain指所使用的协议族(family)可以为AF_UNIX和AF_INET,一般只用AF_INET(指Internet)type指所用的传输类型,可以为SOCK_STERAM(面向连接的TCP),和SOCK_DGRAM(面向无连接

在Windows上访问Linux下的Samba服务器的方法

  首先先记录下在linux客户端怎么用命令访问windows或者linux的共享文件夹 第一步 代码如下: smbclient -L //192.168.100.5 -U wujie (smbclient是命令 -L是列出服务器有哪些共享文件 -U后面跟着的是用户名) 第二步 输入密码后会看到服务器共享的文件夹,然后用命令 smbclient //192.168.100.5/资源共享 -U wujie 进入服务器,输入密码后会看到如下(我登陆的是windows的共享文件) 代码如下: Pass

linux下多线程-linux下 多线程共享数据问题

问题描述 linux下 多线程共享数据问题 环境:linux64位服务器 现有海量文件(按秒级的时间顺序源源不断的来),我需要起多线程读取这些文件,并利用文件内容构建一个比较庞大的数据结构(各种map.list的组合),另外还有一批线程检测这个数据结构某些位置的值并触发具体的任务(当然也可以在构建数据结构的同时进行触发). 问题是: 1.多线程如何并发的构建这个数据结构(结构中的list是需要按照文件到来时间排序的),要对数据结构里面的所有数据都上锁么?上锁上在哪?能不上锁么? 2.如何并行的对

求高手帮忙看下哪里错了,并帮忙改下,题目是编写一个程序,类名为CopyFile,实现文件的复制。程序的使用格式为 java CopyFile 原文件名目标文件名

问题描述 importjava.io.*;publicclassCopyFile{staticStringurl1=CopyFile;staticStringurl2=CopyFile;staticvoidmain(Stringargs[])throwsIOException{(newFile(url2)).mkdirs();File[]file=(newFile(url1)).listFiles();for(inti=0;i<file.length;i++){if(file[i].isfile

socket在windows下和linux下的区别

原文:socket在windows下和linux下的区别 1)头文件 windows下winsock.h/winsock2.h linux下sys/socket.h    错误处理:errno.h  2)初始化 windows下需要用WSAStartup WSADATA wsaData;         err = WSAStartup(0x202,&wsaData); if ( err != 0 ) { return 0; } else if ( LOBYTE( wsaData.wVersio

在windows下使用Xming+Putty显示Linux下软件图形界面

From: http://www.blogjava.net/ivanwan/archive/2012/04/26/376670.html From: http://www.bubuko.com/infodetail-807886.html 安装Xming 和 Putty         看Wiki系统地了解了一下X Window System.X Window System(常被简称为X11或X),是一套基于X display protocol的windowing system,X GUI环境的

Linux下定义Windows常用数据类型

  将一个Windows程序移植到Linux上,发现两个操作系统对很多数据类型的命名方式区别很大,比如Windows下对于无符号数据类型一般用U+x的方式,像UINT.UCHAR.ULONG,而Linux上就要中规中矩,都是unsigned +x;另外,还有一些数据类型是Windows有,而Linux没有的,像DWORD.HANDLE.LPSTR等等.于是我写了一个Windows数据类型在Linux下进行转换的头文件 <p> #define INVALID_HANDLE_VALUE -1 &l

Linux下Wine中文对话框字体乱码怎么办

  Wine中中文存在很多的乱码,显示成<< >> ??等,这是对对话框中"确定"等的解决: Wine中对话框默认的字体是Tahoma,在我们的linux上,Tahoma字体是无法正常显示中文的.比如Wine configuration中的"确定""取消"等就变成了"<<"">>"的字样. 解决方法很简单: 在wine的regedit中,找到: HKEY_LO