资源简介
C语言编写Socket编写进程间传文件,服务器端和客户端传文件.
代码片段和文件信息
/********************************************************************
created: 2006/07/28
filename: Client.cpp
author: 李创
http://www.cppblog.com/converse/
purpose:
*********************************************************************/
#pragma comment(lib “WS2_32“)
#include
#include
#include
#include “../CommonDef.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 dll
WSADATA wsaData;
WORD socketVersion = MAKEWORD(2 2);
if (::WSAStartup(socketVersion &wsaData) != 0)
{
printf(“Init socket dll error\n“);
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;
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 6333 2006-08-01 19:45 SocketDemo1\Client.cpp
文件 5819 2006-08-01 19:45 SocketDemo1\Server.cpp
目录 0 2013-10-15 16:22 SocketDemo1\
相关资源
- DFT的C语言编程实验
- 基于单片机DHT11初始化c语言
- 严蔚敏《数据结构》源代码C语言
- c语言经典考试题库 答案详解
- 电影俱乐部系统C语言
- C语言小学数学出题系统
- C语言备忘录程序代码
- C语言入门 - 日文版
- 高斯投影正反算c语言程序
- 职工信息管理系统 c语言程序设计报告
- 贪心算法 背包问题 c语言
- DOS下鼠标的调用函数C语言
- c语言代码,去停用词
- 使用双向链表实现快速排序,C语言
- 非常好用的C语言线程池,自己测试通
- 基于socket通信的,利用MFC实现TCP通信
- C语言实现统计文章的单词数目实验报
- 用C语言编写的备忘录程序事件记录程
- 基于c语言的huffman图像编解码
- 大学C语言课程设计之信息发布平台
- K-Means K均值C语言实现 里面有个小
- 密码学RSA 算法源码及大数运算的实现
- 数据结构C语言之串操作
- C语言实现线性方程组求解
- 学生成绩管理系统C语言实现
- 数据库课程设计C语言
- C语言课程设计案例精编(14个经典案
- c语言三维线性插值
- GB2312编码和UTF-8互转c语言实现
- 朱战立——数据结构程序(C语言版源
评论
共有 条评论