WINDOW与LINUX的TCP/IP通信

本文详细探讨了客户端与服务器端的TCP/IP通信流程,对比了Windows和Linux下的socket编程差异,特别是sockaddr_in结构体的区别,并提供了具体的Windows服务器端及Linux客户端的代码示例,帮助开发者理解跨平台的文件传输通信实现。
摘要由CSDN通过智能技术生成

客户端与服务器端通信流程

客户端Linux
    建立socket
    确定服务器scokaddr_in结构体
        点分十进制IP转换
    使用connect连接
    打开文件
    准备缓冲区
    缓冲区初始化置空
    将文件内容读入缓冲区
    使用send将缓冲区内容发送到服务器
    文件内容发送完成
    关闭文件
    关闭socket
服务器 Windows

    添加winsock头文件
    初始化WSAStartup 
    建立socket
    确定服务器scokaddr_in结构体
        点分十进制IP转换
    使用bind绑定套接字
    使用listen监听
    使用accept接受连接请求
        accept返回新的套接字描述符
    使用recv接收传来的数据(文件路径)
    打开文件,这里需要文件名
        从该字符串获取文件名
    使用recv接收文件内容
        判断recv函数返回的状态
    将接收到的内容放入缓冲区
    将缓冲区内容写入文件
    关闭文件
    WSACleanup函数
    关闭socket

WINDOW下socket编程和LINUX的区别

头文件

    #include <winsock2.h>

初始化

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

使用Socket的程序在使用Socket之前必须调用WSAStartup函数。

    int WSAStartup ( WORD wVersionRequested, LPWSADATA lpWSAData ); 

    1)wVersionRequested是Windows Sockets API提供的调用方可使用的最高版本号。
    2)lpWSAData 是指向WSADATA数据结构的指针,用来接收Windows Sockets实现的细节。
    当一个应用程序调用WSAStartup函数时,操作系统根据请求的Socket版本来搜索相应的Socket库,然后绑定找到的Socket库到该应用程序中。假如一个程序要使用2.1版本的Socket,那么程序代码如下 
        wVersionRequested = MAKEWORD( 2, 1 ); 
WSACleanup函数 

    int WSACleanup (void); 
    应用程序在完成对请求的Socket库的使用后,要调用WSACleanup函数来解除与Socket库的绑定并且释放Socket库所占用的系统
关闭socket

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

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

LINUX和WINDOWS下sockaddr_in结构体的区别

Linux:
    struct sockaddr_in 
    { 
   
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值