socket编程软件(Socket软件)

      最后更新:2022-11-09 14:18

      socket软件的编程。 我要实现的功能是!在打开的网页上 自动接受网页上的动态问题!

      如上面人所说,用Ajax、DOM 加载,是比较常用的技术了
      问题描述不清楚,何为自动接受网页上的动态问题
      用ajax 吧。
      socket软件的编程。 我要实现的功能是!在打开的网页上 自动接受网页上的动态问题!

      请问,我要用python语言实现socket编程,请问需要下载什么软件呢? 急需啊~!!!!先谢谢了!

      我从网上给你拷两个例子服务器#!/usr/bin/python"USAGE: echoserver.py "from SocketServer import BaseRequestHandler, TCPServerimport sys, socket class EchoHandler(BaseRequestHandler):  def handle(self):    print "Client connected:", self.client_address    self.request.sendall(self.request.recv(2**16))    self.request.close()if len(sys.argv) != 2:  print __doc__else:  TCPServer(('', int(sys.argv[1])), EchoHandler).serve_forever()客户端#!/usr/bin/python"USAGE: echoclient.py   "from socket import *import sysif len(sys.argv) != 4:  print __doc__  sys.exit(0)sock = socket(AF_INET, SOCK_STREAM)sock.connect((sys.argv[1], int(sys.argv[3])))message = sys.argv[2]messlen, received = sock.send(message), 0if messlen != len(message):  print "Failed to send complete message"print "Received: ",while received < messlen:  data = sock.recv(32)  sys.stdout.write(data)  received += len(data)printsock.close()
      可以用python支持的zeromq库,对socket抽象比较好,用起来简单
      python 自带socket模块,只要去官网下个python就行了。简单的socket例子网上大把,这里就不详说了。
      python自带了socket模块,不需要下载其他软件
      请问,我要用python语言实现socket编程,请问需要下载什么软件呢? 急需啊~!!!!先谢谢了!

      在windows下用C语言如何实现socket网络编程,需要用到哪些头文件或者库?

      需要用到的头文件包含:#include #include 与Linux环境下socket编程相比,windows环境多了一个步骤:启动或者初始化winsock库Winsock,一种标准API,一种网络编程接口,用于两个或多个应用程序(或进程)之间通过网络进行数据通信。具有两个版本:Winsock 1:Windows CE平台支持。头文件:WinSock.h库:wsock32.libWinsock 2:部分平台如Windows CE貌似不支持。通过前缀WSA可以区别于Winsock 1版本。个别函数如WSAStartup、WSACleanup、WSARecvEx、WSAGetLastError都属于Winsock 1.1规范的函数;头文件:WinSock2.h库:ws2_32.libmswsock.h用于编程扩展,使用时必须链接mswsock.dll扩展资料winsock库的加载与卸载:加载:int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData);加载成功,返回值为0。WORD wVersionRequested:加载的winsock版本,使用宏MAKEWORD(x, y),x表示高字节,y表示低字节。然而使用时MAKEWORD(2, 2)。高字节与低字节相同~~LPWSADATA lpWSAData:WSADATA结构的指针,传入参数后,系统帮助我们填充版本信息。有兴趣的可以看看结构体内容,不过基本用不着。卸载:int WSACleanup(void);比起加载,卸载的函数真是轻松愉快。
      在windows下用C语言如何实现socket网络编程,需要用到以下头文件和库:1、头文件 winsock2.h,2、静态库文件 Ws2_32.lib3、动态DLL文件 Ws2_32.dll我们可以简单的把Socket理解为一个可以连通网络上不同计算机程序之间的管道,把一堆数据从管道的A端扔进去,则会从管道的B端(也许同时还可以从C、D、E、F……端冒出来)。管道的端口由两个因素来唯一确认,即机器的IP地址和程序所使用的端口号。扩展资料:Socket可以支持数据的发送和接收,它会定义一种称为套接字的变量,发送数据时首先创建套接字,然后使用该套接字的sendto等方法对准某个IP/端口进行数据发送;接收端也首先创建套接字,然后将该套接字绑定到一个IP/端口上,所有发向此端口的数据会被该套接字的recv等函数读出。如同读出文件中的数据一样。参考资料来源:百度百科-套接字
      在windows下用C语言如何实现socket网络编程,需要用到以下头文件和库:头文件    winsock2.h,静态库文件    Ws2_32.lib动态DLL文件    Ws2_32.dll写一个UDP发送程序的步骤如下:1.         用WSAStartup函数初始化Socket环境;2.         用socket函数创建一个套接字;3.         用setsockopt函数设置套接字的属性,例如设置为广播类型;很多时候该步骤可以省略;4.         创建一个sockaddr_in,并指定其IP地址和端口号;5.         用sendto函数向指定地址发送数据,这里的目标地址就是广播地址;注意这里不需要绑定,即使绑定了,其地址也会被sendto中的参数覆盖;若使用send函数则会出错,因为send是面向连接的,而UDP是非连接的,只能使用sendto发送数据;6.         用closesocket函数关闭套接字;7.         用WSACleanup函数关闭Socket环境。与之类似,一个UDP接收程序的步骤如下,注意接收方一定要bind套接字:1.         用WSAStartup函数初始化Socket环境;2.         用socket函数创建一个套接字;3.         用setsockopt函数设置套接字的属性,例如设置为广播类型;4.         创建一个sockaddr_in,并指定其IP地址和端口号;5.         用bind函数将套接字与接收的地址绑定起来,然后调用recvfrom函数或者recv接收数据; 注意这里一定要绑定,因为接收报文的套接字必须在网络上有一个绑定的名称才能保证正确接收数据;6.         用closesocket函数关闭套接字;7.         用WSACleanup函数关闭Socket环境。参考资料地址:http://blog.csdn.net/xxbsky520/article/details/6161217
      主要是看采取什么样的协议。是tcp还是udp使用的头文件是不一样的。不过差别都不大。winscok2.h就够用了。不过往深了走其实还是要涉及到其他的,这个普通的套接字编程主要是winscok2.h里面的。
      那就是控制台应用程序喽 看孙鑫VC6视频教程网络编程部分很详细,VC6只是个平台,可以随便用什么来写 主要用到winscok2.h
      在windows下用C语言如何实现socket网络编程,需要用到哪些头文件或者库?

      tcp udp socket调试工具怎么用

      SocketTool调试软件是一款网络TCP/UDP通信调试工具,本工具集功能强大与简单易用为一体,是无需安装的免费绿色软件。 它可以帮助网络编程人员、网络维护人员检查所开发的网络应用软硬件的通信状况。 是一款非常好用的socket 链接测试工具TCP/UDP Socket调试工具TCP/UDP Socket调试工具的特色★ 全面集成 TCP服务器/客户端; UDP服务器/客户端; UDP广播/组播 功能★ 支持多Socket并行测试, 采用树状Socket可视化界面,所有Socket句柄一目了然★ 在一个程序内可进行多句柄/多类型的Socket的创建/删除/以及数据收发等操作★ 支持16进制的发送和16进制接收显示,支持汉字以及文本发送★ 用户可以方便的把接收到的数据保存下来★ 支持发送、接收字节数统计 ★ 支持数据循环发送,同一内容可自动发送1次至10000次
      tcp udp socket调试工具怎么用

      试用socket api借口设计一个文件传送软件,并编程实现,可自定义文件传输的通信。

      我用C++写的,可以调试的!要加分啊啊!记得啊!呵呵... 代码如下://功能:利用SOCKET传送文件的代码/*server.h*/#pragma comment(lib, "WS2_32")#include#include//#include#include#ifndef COMMONDEF_H#define COMMONDEF_H#define MAX_PACKET_SIZE 10240 // 数据包的最大长度,单位是sizeof(char)#define MAXFILEDIRLENGTH 256 // 存放文件路径的最大长度#define PORT 4096 // 端口号#define SERVER_IP "127.0.0.1" // server端的IP地址// 各种消息的宏定义#define INVALID_MSG -1 // 无效的消息标识#define MSG_FILENAME 1 // 文件的名称#define MSG_FILELENGTH 2 // 传送文件的长度#define MSG_CLIENT_READY 3 // 客户端准备接收文件#define MSG_FILE 4 // 传送文件#define MSG_SENDFILESUCCESS 5 // 传送文件成功#define MSG_OPENFILE_ERROR 10 // 打开文件失败,可能是文件路径错误找不到文件等原因#define MSG_FILEALREADYEXIT_ERROR 11 // 要保存的文件已经存在了class CCSDef{public:#pragma pack(1) // 使结构体的数据按照1字节来对齐,省空间// 消息头struct TMSG_HEADER{char cMsgID; // 消息标识TMSG_HEADER(char MsgID = INVALID_MSG): cMsgID(MsgID){}};// 请求传送的文件名// 客户端传给服务器端的是全路径名称// 服务器传回给客户端的是文件名struct TMSG_FILENAME : public TMSG_HEADER{char szFileName[256]; // 保存文件名的字符数组TMSG_FILENAME(): TMSG_HEADER(MSG_FILENAME){}};// 传送文件长度struct TMSG_FILELENGTH : public TMSG_HEADER{long lLength;TMSG_FILELENGTH(long length): TMSG_HEADER(MSG_FILELENGTH), lLength(length){}};// Client端已经准备好了,要求Server端开始传送文件struct TMSG_CLIENT_READY : public TMSG_HEADER{TMSG_CLIENT_READY(): TMSG_HEADER(MSG_CLIENT_READY){}};// 传送文件struct TMSG_FILE : public TMSG_HEADER{union // 采用union保证了数据包的大小不大于MAX_PACKET_SIZE * sizeof(char){char szBuff[MAX_PACKET_SIZE];struct{int nStart;int nSize;char szBuff[MAX_PACKET_SIZE - 2 * sizeof(int)];}tFile;};TMSG_FILE(): TMSG_HEADER(MSG_FILE){}};// 传送文件成功struct TMSG_SENDFILESUCCESS : public TMSG_HEADER{TMSG_SENDFILESUCCESS(): TMSG_HEADER(MSG_SENDFILESUCCESS){}};// 传送出错信息,包括:// MSG_OPENFILE_ERROR:打开文件失败// MSG_FILEALREADYEXIT_ERROR:要保存的文件已经存在了struct TMSG_ERROR_MSG : public TMSG_HEADER{TMSG_ERROR_MSG(char cErrorMsg): TMSG_HEADER(cErrorMsg){}};#pragma pack()};#endif/*server.h*/#pragma comment(lib, "WS2_32")#include#include//#include#include#ifndef COMMONDEF_H#define COMMONDEF_H#define MAX_PACKET_SIZE 10240 // 数据包的最大长度,单位是sizeof(char)#define MAXFILEDIRLENGTH 256 // 存放文件路径的最大长度#define PORT 4096 // 端口号#define SERVER_IP "127.0.0.1" // server端的IP地址// 各种消息的宏定义#define INVALID_MSG -1 // 无效的消息标识#define MSG_FILENAME 1 // 文件的名称#define MSG_FILELENGTH 2 // 传送文件的长度#define MSG_CLIENT_READY 3 // 客户端准备接收文件#define MSG_FILE 4 // 传送文件#define MSG_SENDFILESUCCESS 5 // 传送文件成功#define MSG_OPENFILE_ERROR 10 // 打开文件失败,可能是文件路径错误找不到文件等原因#define MSG_FILEALREADYEXIT_ERROR 11 // 要保存的文件已经存在了class CCSDef{public:#pragma pack(1) // 使结构体的数据按照1字节来对齐,省空间// 消息头struct TMSG_HEADER{char cMsgID; // 消息标识TMSG_HEADER(char MsgID = INVALID_MSG): cMsgID(MsgID){}};// 请求传送的文件名// 客户端传给服务器端的是全路径名称// 服务器传回给客户端的是文件名struct TMSG_FILENAME : public TMSG_HEADER{char szFileName[256]; // 保存文件名的字符数组TMSG_FILENAME(): TMSG_HEADER(MSG_FILENAME){}};// 传送文件长度struct TMSG_FILELENGTH : public TMSG_HEADER{long lLength;TMSG_FILELENGTH(long length): TMSG_HEADER(MSG_FILELENGTH), lLength(length){}};// Client端已经准备好了,要求Server端开始传送文件struct TMSG_CLIENT_READY : public TMSG_HEADER{TMSG_CLIENT_READY(): TMSG_HEADER(MSG_CLIENT_READY){}};// 传送文件struct TMSG_FILE : public TMSG_HEADER{union // 采用union保证了数据包的大小不大于MAX_PACKET_SIZE * sizeof(char){char szBuff[MAX_PACKET_SIZE];struct{int nStart;int nSize;char szBuff[MAX_PACKET_SIZE - 2 * sizeof(int)];}tFile;};TMSG_FILE(): TMSG_HEADER(MSG_FILE){}};// 传送文件成功struct TMSG_SENDFILESUCCESS : public TMSG_HEADER{TMSG_SENDFILESUCCESS(): TMSG_HEADER(MSG_SENDFILESUCCESS){}};// 传送出错信息,包括:// MSG_OPENFILE_ERROR:打开文件失败// MSG_FILEALREADYEXIT_ERROR:要保存的文件已经存在了struct TMSG_ERROR_MSG : public TMSG_HEADER{TMSG_ERROR_MSG(char cErrorMsg): TMSG_HEADER(cErrorMsg){}};#pragma pack()};#endif/*server.cpp*/#include "server.h"char g_szNewFileName[MAXFILEDIRLENGTH];char g_szBuff[MAX_PACKET_SIZE + 1];long g_lLength;char* g_pBuff = NULL;// 初始化socket库bool InitSocket();// 关闭socket库bool CloseSocket();// 解析消息进行相应的处理bool ProcessMsg(SOCKET sClient);// 监听Client的消息void ListenToClient();// 打开文件bool OpenFile(CCSDef::TMSG_HEADER* pMsgHeader, SOCKET sClient);// 传送文件bool SendFile(SOCKET sClient);// 读取文件进入缓冲区bool ReadFile(SOCKET sClient);int main(){InitSocket();ListenToClient();CloseSocket();return 0;}void ListenToClient(){// 创建socket套接字SOCKET sListen = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if (SOCKET_ERROR == sListen){printf("Init Socket Error!n");return;}// 绑定socket到一个本地地址sockaddr_in sin;sin.sin_family = AF_INET;sin.sin_port = htons(PORT);sin.sin_addr.S_un.S_addr = INADDR_ANY;if (::bind(sListen, (LPSOCKADDR)&sin, sizeof(sockaddr_in)) == SOCKET_ERROR){printf("Bind Error!n");return;}// 设置socket进入监听状态if (::listen(sListen, 10) == SOCKET_ERROR){printf("Listen Error!n");return;}printf("Listening To Client...n");// 循环接收client端的连接请求sockaddr_in ClientAddr;int nAddrLen = sizeof(sockaddr_in);SOCKET sClient;while (INVALID_SOCKET == (sClient = ::accept(sListen, (sockaddr*)&ClientAddr, &nAddrLen))){}while (true == ProcessMsg(sClient)){}// 关闭同客户端的连接::closesocket(sClient);::closesocket(sListen);}bool InitSocket(){// 初始化socket dllWSADATA wsaData;WORD socketVersion = MAKEWORD(2, 2);if (::WSAStartup(socketVersion, &wsaData) != 0){printf("Init socket dll errorn");return false;}return true;}bool CloseSocket(){// 释放winsock库::WSACleanup();if (NULL != g_pBuff){delete [] g_pBuff;g_pBuff = NULL;}return true;}bool ProcessMsg(SOCKET sClient){int nRecv = ::recv(sClient, g_szBuff, MAX_PACKET_SIZE + 1, 0);if (nRecv > 0){g_szBuff[nRecv] = '';}// 解析命令CCSDef::TMSG_HEADER* pMsgHeader = (CCSDef::TMSG_HEADER*)g_szBuff;switch (pMsgHeader->cMsgID){case MSG_FILENAME: // 文件名{OpenFile(pMsgHeader, sClient);}break;case MSG_CLIENT_READY: // 客户端准备好了,开始传送文件{SendFile(sClient);}break;case MSG_SENDFILESUCCESS: // 传送文件成功{printf("Send File Success!n");return false;}break;case MSG_FILEALREADYEXIT_ERROR: // 要保存的文件已经存在了{printf("The file reay to send already exit!n");return false;}break;}return true;}bool ReadFile(SOCKET sClient){if (NULL != g_pBuff){return true;}// 打开文件FILE *pFile;if (NULL == (pFile = fopen(g_szNewFileName, "rb"))) // 打开文件失败{printf("Cannot find the file, request the client input file name againn");CCSDef::TMSG_ERROR_MSG tMsgErrorMsg(MSG_OPENFILE_ERROR);::send(sClient, (char*)(&tMsgErrorMsg), sizeof(CCSDef::TMSG_ERROR_MSG), 0);return false;}// 把文件的长度传回到client去fseek(pFile, 0, SEEK_END);g_lLength = ftell(pFile);printf("File Length = %dn", g_lLength);CCSDef::TMSG_FILELENGTH tMsgFileLength(g_lLength);::send(sClient, (char*)(&tMsgFileLength), sizeof(CCSDef::TMSG_FILELENGTH), 0);// 处理文件全路径名,把文件名分解出来char szDrive[_MAX_DRIVE], szDir[_MAX_DIR], szFname[_MAX_FNAME], szExt[_MAX_EXT];_splitpath(g_szNewFileName, szDrive, szDir, szFname, szExt);strcat(szFname,szExt);CCSDef::TMSG_FILENAME tMsgFileName;strcpy(tMsgFileName.szFileName, szFname);printf("Send File Name: %sn", tMsgFileName.szFileName);::send(sClient, (char*)(&tMsgFileName), sizeof(CCSDef::TMSG_FILENAME), 0);// 分配缓冲区读取文件内容g_pBuff = new char[g_lLength + 1];if (NULL == g_pBuff){return false;}fseek(pFile, 0, SEEK_SET);fread(g_pBuff, sizeof(char), g_lLength, pFile);g_pBuff[g_lLength] = '';fclose(pFile);return true;}// 打开文件bool OpenFile(CCSDef::TMSG_HEADER* pMsgHeader, SOCKET sClient){CCSDef::TMSG_FILENAME* pRequestFilenameMsg = (CCSDef::TMSG_FILENAME*)pMsgHeader;// 对文件路径名进行一些处理char *p1, *p2;for (p1 = pRequestFilenameMsg->szFileName, p2 = g_szNewFileName;'' != *p1;++p1, ++p2){if ('n' != *p1){*p2 = *p1;}if ('\' == *p2){*(++p2) = '\';}}*p2 = '';ReadFile(sClient);return true;}// 传送文件bool SendFile(SOCKET sClient){if (NULL == g_pBuff){ReadFile(sClient);}int nPacketBufferSize = MAX_PACKET_SIZE - 2 * sizeof(int); // 每个数据包存放文件的buffer大小// 如果文件的长度大于每个数据包所能传送的buffer长度那么就分块传送for (int i = 0; i < g_lLength; i += nPacketBufferSize){CCSDef::TMSG_FILE tMsgFile;tMsgFile.tFile.nStart = i;if (i + nPacketBufferSize + 1> g_lLength){tMsgFile.tFile.nSize = g_lLength - i;}else{tMsgFile.tFile.nSize = nPacketBufferSize;}//printf("start = %d, size = %dn", tMsgFile.tFile.nStart, tMsgFile.tFile.nSize);memcpy(tMsgFile.tFile.szBuff, g_pBuff + tMsgFile.tFile.nStart, tMsgFile.tFile.nSize);::send(sClient, (char*)(&tMsgFile), sizeof(CCSDef::TMSG_FILE), 0);Sleep(0.5);}delete [] g_pBuff;g_pBuff = NULL;return true;}/*client.h同server.h*//*client.cpp*/#include "client.h"long g_lLength = 0;char* g_pBuff = NULL;char g_szFileName[MAXFILEDIRLENGTH];char g_szBuff[MAX_PACKET_SIZE + 1];SOCKET g_sClient;// 初始化socket库bool InitSocket();// 关闭socket库bool CloseSocket();// 把用户输入的文件路径传送到server端bool SendFileNameToServer();// 与server端连接bool ConectToServer();// 打开文件失败bool OpenFileError(CCSDef::TMSG_HEADER *pMsgHeader);// 分配空间以便写入文件bool AllocateMemoryForFile(CCSDef::TMSG_HEADER *pMsgHeader);// 写入文件bool WriteToFile(CCSDef::TMSG_HEADER *pMsgHeader);// 处理server端传送过来的消息bool ProcessMsg();int main(){InitSocket();ConectToServer();CloseSocket();return 0;}// 初始化socket库bool InitSocket(){// 初始化socket dllWSADATA wsaData;WORD socketVersion = MAKEWORD(2, 2);if (::WSAStartup(socketVersion, &wsaData) != 0){printf("Init socket dll errorn");exit(-1);}return true;}// 关闭socket库bool CloseSocket(){// 关闭套接字::closesocket(g_sClient);// 释放winsock库::WSACleanup();return true;}// 与server端连接进行文件的传输bool ConectToServer(){// 初始化socket套接字if (SOCKET_ERROR == (g_sClient = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP))){printf("Init Socket Error!n");exit(-1);}sockaddr_in servAddr;servAddr.sin_family = AF_INET;servAddr.sin_port = htons(PORT);servAddr.sin_addr.S_un.S_addr = ::inet_addr(SERVER_IP);if (INVALID_SOCKET == (::connect(g_sClient, (sockaddr*)&servAddr, sizeof(sockaddr_in)))){printf("Connect to Server Error!n");exit(-1);}// 输入文件路径传输到server端SendFileNameToServer();// 接收server端传过来的信息,直到保存文件成功为止while (true == ProcessMsg()){}return true;}// 把用户输入的文件路径传送到server端bool SendFileNameToServer(){char szFileName[MAXFILEDIRLENGTH];printf("Input the File Directory: ");fgets(szFileName, MAXFILEDIRLENGTH, stdin);// 把文件路径发到server端CCSDef::TMSG_FILENAME tMsgRequestFileName;strcpy(tMsgRequestFileName.szFileName, szFileName);if (SOCKET_ERROR == ::send(g_sClient, (char*)(&tMsgRequestFileName), sizeof(CCSDef::TMSG_FILENAME), 0)){printf("Send File Name Error!n");exit(-1);}return true;}// 处理server端传送过来的消息bool ProcessMsg(){CCSDef::TMSG_HEADER *pMsgHeader;int nRecv = ::recv(g_sClient, g_szBuff, MAX_PACKET_SIZE + 1, 0);pMsgHeader = (CCSDef::TMSG_HEADER*)g_szBuff;switch (pMsgHeader->cMsgID){case MSG_OPENFILE_ERROR: // 打开文件错误{OpenFileError(pMsgHeader);}break;case MSG_FILELENGTH: // 文件的长度{if (0 == g_lLength){g_lLength = ((CCSDef::TMSG_FILELENGTH*)pMsgHeader)->lLength;printf("File Length: %dn", g_lLength);}}break;case MSG_FILENAME: // 文件名{return AllocateMemoryForFile(pMsgHeader);}break;case MSG_FILE: // 传送文件,写入文件成功之后退出这个函数{if (WriteToFile(pMsgHeader)){return false;}}break;}return true;}// 打开文件失败bool OpenFileError(CCSDef::TMSG_HEADER *pMsgHeader){if (NULL != g_pBuff)return true;assert(NULL != pMsgHeader);printf("Cannot find file!Please input again!n");// 重新输入文件名称SendFileNameToServer();return true;}// 查找是否已经存在了要保存的文件,同时分配缓冲区保存文件bool AllocateMemoryForFile(CCSDef::TMSG_HEADER *pMsgHeader){assert(NULL != pMsgHeader);if (NULL != g_pBuff){return true;}CCSDef::TMSG_FILENAME* pRequestFilenameMsg = (CCSDef::TMSG_FILENAME*)pMsgHeader;printf("File Name: %sn", pRequestFilenameMsg->szFileName);// 把文件的路径设置为C盘根目录下strcpy(g_szFileName, "c:\");strcat(g_szFileName, pRequestFilenameMsg->szFileName);// 查找相同文件名的文件是否已经存在,如果存在报错退出FILE* pFile;if (NULL != (pFile = fopen(g_szFileName, "r"))){// 文件已经存在,要求重新输入一个文件printf("The file already exist!n");CCSDef::TMSG_ERROR_MSG tMsgErrorMsg(MSG_FILEALREADYEXIT_ERROR);::send(g_sClient, (char*)(&tMsgErrorMsg), sizeof(CCSDef::TMSG_ERROR_MSG), 0);fclose(pFile);return false;}// 分配缓冲区开始接收文件,如果分配成功就给server端发送开始传送文件的要求g_pBuff = new char[g_lLength + 1];if (NULL != g_pBuff){memset(g_pBuff, '', g_lLength + 1);printf("Now ready to get the file %s!n", pRequestFilenameMsg->szFileName);CCSDef::TMSG_CLIENT_READY tMsgClientReady;if (SOCKET_ERROR == ::send(g_sClient, (char*)(&tMsgClientReady), sizeof(CCSDef::TMSG_CLIENT_READY), 0)){printf("Send Error!n");exit(-1);}}else{printf("Alloc memory for file error!n");exit(-1);}return true;}// 写入文件bool WriteToFile(CCSDef::TMSG_HEADER *pMsgHeader){assert(NULL != pMsgHeader);CCSDef::TMSG_FILE* pMsgFile = (CCSDef::TMSG_FILE*)pMsgHeader;int nStart = pMsgFile->tFile.nStart;int nSize = pMsgFile->tFile.nSize;memcpy(g_pBuff + nStart, pMsgFile->tFile.szBuff, nSize);if (0 == nStart){printf("Saving file into buffer...n");}memcpy(g_pBuff + nStart, pMsgFile->tFile.szBuff, nSize);//printf("start = %d, size = %dn", nStart, nSize);// 如果已经保存到缓冲区完毕就写入文件if (nStart + nSize >= g_lLength){printf("Writing to disk....n");// 写入文件FILE* pFile;pFile = fopen(g_szFileName, "w+b");fwrite(g_pBuff, sizeof(char), g_lLength, pFile);delete [] g_pBuff;g_pBuff = NULL;fclose(pFile);// 保存文件成功传送消息给server退出serverCCSDef::TMSG_SENDFILESUCCESS tMsgSendFileSuccess;while (SOCKET_ERROR == ::send(g_sClient, (char*)(&tMsgSendFileSuccess), sizeof(CCSDef::TMSG_SENDFILESUCCESS), 0)){}printf("Save the file %s success!n", g_szFileName);return true;}else{return false;} }
      试用socket api借口设计一个文件传送软件,并编程实现,可自定义文件传输的通信。

      本文由 在线网速测试 整理编辑,转载请注明出处。

          热门文章

          文章分类