客户端与服务器端通信流程
客户端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
{