資源簡介
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(int?argc?char?*argv[])
{
InitSocket();
ConectToServer();
CloseSocket();
return?0;
}
//?初始化socket庫
bool?InitSocket()
{
PGG_DEBUG(“InitSocket()?invoke?begin“);
//?初始化socket?dll
WSADATA?wsaData;
WORD?socketVersion?=?MAKEWORD(2?2);
if?(::WSAStartup(socketVersion?&wsaData)?!=?0)
{
printf(“Init?socket?dll?error\n“);
exit(-1);
}
PGG_DEBUG(“InitSocket()?invoke?end?return?true“);
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_FILELENG
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????6453??2011-03-22?21:36??C語言socket編程指南(講解+實例)\code\Client\Client.cpp
?????文件???????4401??2011-03-22?21:36??C語言socket編程指南(講解+實例)\code\Client\Client.dsp
?????文件????????535??2011-03-13?07:01??C語言socket編程指南(講解+實例)\code\Client\Client.dsw
?????文件???????5821??2011-03-13?19:48??C語言socket編程指南(講解+實例)\code\Server\Server.cpp
?????文件???????4349??2006-07-31?14:17??C語言socket編程指南(講解+實例)\code\Server\Server.dsp
?????文件????????535??2011-03-13?07:00??C語言socket編程指南(講解+實例)\code\Server\Server.dsw
?????文件???????2677??2011-03-13?07:02??C語言socket編程指南(講解+實例)\code\CommonDef.h
?????文件????????736??2006-07-31?14:19??C語言socket編程指南(講解+實例)\code\SocketDemo.dsw
?????文件?????174080??2011-03-16?07:55??C語言socket編程指南(講解+實例)\C語言socket編程指南.doc
?????文件????????272??2011-03-23?07:06??C語言socket編程指南(講解+實例)\說明.txt
?????目錄??????????0??2011-03-23?07:02??C語言socket編程指南(講解+實例)\code\Client
?????目錄??????????0??2011-03-23?07:02??C語言socket編程指南(講解+實例)\code\Server
?????目錄??????????0??2011-03-23?07:03??C語言socket編程指南(講解+實例)\code
?????目錄??????????0??2011-03-23?07:02??C語言socket編程指南(講解+實例)
-----------?---------??----------?-----??----
???????????????199859????????????????????14
- 上一篇:JPEG源碼(C語言實現)
- 下一篇:BASIC語言編程初學者手冊
評論
共有 條評論