資源簡介
使用C語言Socket實現多線程服務器,TCP與UDP數據傳輸,可以進行多客戶端登陸以及多客戶端同時發送消息,適合剛開始進行網絡技術基礎編程的人士使用。
代碼片段和文件信息
#include?
#include?
#include?
#pragma?comment(lib“Ws2_32.lib“)
using?namespace?std;
#define?BUFFERSIZE?100
void?DisplayHint();
int?main(int?argc?char*?argv[])
{
if(argc?!=3)
{
cout<<“usage:“<<“HwClient?serverip??serverport“< return?0;
}
???
WORD?wVersion;
WSAData?wData;
SOCKET??tcpSudpS;
sockaddr_in?remote;
int?choice;
char?choiceBuf[10];
int?err;
int?udpPort;
????int?ret;
int?addrLen;
char?recvBuf[BUFFERSIZE]?=?““;
char?sendBuf[BUFFERSIZE]?=?““;
wVersion?=?MAKEWORD(22);
err?=?WSAStartup(wVersion&wData);
if(err?!=0)
{
cout<<“Fail?to?laod?socket?dll:“< return?0;
}
????//------------------------
tcpS?=?WSASocket(AF_INETSOCK_STREAMIPPROTO_TCPNULL00);
if(tcpS?==?INVALID_SOCKET)
{
cout<<“Error?code:“< WSACleanup();
return?0;
}
?
????remote.sin_family?=?AF_INET;
????remote.sin_addr.s_addr?=?inet_addr(argv[1]?);???//?server?ip
????remote.sin_port?=??htons(atoi(argv[2]))?;????????//?server?port
err?=?connect(?tcpS?(SOCKADDR*)?&remote?sizeof(remote)?);
if(err?==?SOCKET_ERROR)?
{
cout<<“Failed?to?connect“< ????????WSACleanup();
????????return?0;
}
// ret?=?SOCKET_ERROR;
while(1)
{
ret?=?recv(tcpSrecvBufBUFFERSIZE0);
cout<
do
{
cout<<“input?:?GET?UDP?PORT“< ????cin.getline(sendBuf20);
if(strcmp(sendBuf“GET?UDP?PORT“)?!=0)
cout<<“Bad?request.“< }while(strcmp(sendBuf“GET?UDP?PORT“)?!=0);
ret?=?send(tcpSsendBufstrlen(sendBuf)0);
if(ret?==?SOCKET_ERROR)
{
cout<<“send()?failed:“< break;
}
//receive?udp?port
memset(recvBuf0BUFFERSIZE);
ret?=?recv(tcpSrecvBufBUFFERSIZE0);???
udpPort?=?atoi(recvBuf);
cout<<“udp?port?is:“< ????????
//------------------------------
//create?udp?socket
udpS?=?WSASocket(AF_INETSOCK_DGRAMIPPROTO_UDPNULL
??????????????????????????0WSA_FLAG_OVERLAPPED);
????if(udpS?==?INVALID_SOCKET)
{
cout<<“create?udp?socket?error:“< ??? return?0;
} ??
????????do{
DisplayHint();
????????cin.getline(choiceBufBUFFERSIZE);
????????????choice?=?atoi(choiceBuf);
???? switch(choice)
{
case?1:
strcpy(sendBuf“GET?CUR?TIME“);
ret?=?send(tcpSsendBufstrlen(sendBuf)0);
????????if(ret?==?SOCKET_ERROR)
{
cout<<“send()?failed:“< break;
}
memset(recvBuf0BUFFERSIZE);
ret?=?recv(tcpSrecvBufBUFFERSIZE0);
????????cout<<“Current?time?is:?“< ????????break;
?case?2:
cout<<“Enter?your?message:“< memset(sendBuf0BUFFERSIZE);
????????cin.getline(sendBufBUFFERSIZE);
????????????????????remote.sin_family?=?AF_INET;
remote.sin_port?=?htons(udpPort);
remote.sin
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????71680??2014-11-06?17:04??SocketClient\Debug\SocketClient.exe
?????文件?????523892??2014-11-06?17:04??SocketClient\Debug\SocketClient.ilk
?????文件?????953344??2014-11-06?17:04??SocketClient\Debug\SocketClient.pdb
?????文件?????????61??2014-11-05?18:59??SocketClient\Debug\新建文本文檔.txt
?????文件???????4045??2014-11-06?17:04??SocketClient\SocketClient\client.cpp
?????文件????????594??2014-11-06?17:04??SocketClient\SocketClient\Debug\cl.command.1.tlog
?????文件??????29502??2014-11-06?17:04??SocketClient\SocketClient\Debug\CL.read.1.tlog
?????文件????????308??2014-11-06?17:04??SocketClient\SocketClient\Debug\CL.write.1.tlog
?????文件?????189528??2014-11-06?17:04??SocketClient\SocketClient\Debug\client.obj
?????文件??????????2??2014-11-06?17:04??SocketClient\SocketClient\Debug\li
?????文件??????????2??2014-11-06?17:04??SocketClient\SocketClient\Debug\li
?????文件??????????2??2014-11-06?17:04??SocketClient\SocketClient\Debug\li
?????文件??????????2??2014-11-06?17:04??SocketClient\SocketClient\Debug\li
?????文件???????1082??2014-11-06?17:04??SocketClient\SocketClient\Debug\li
?????文件???????2600??2014-11-06?17:04??SocketClient\SocketClient\Debug\li
?????文件????????386??2014-11-06?17:04??SocketClient\SocketClient\Debug\li
?????文件?????????59??2014-11-06?17:04??SocketClient\SocketClient\Debug\SocketClient.lastbuildstate
?????文件???????1744??2014-11-06?17:04??SocketClient\SocketClient\Debug\SocketClient.log
?????文件?????723968??2014-11-06?17:04??SocketClient\SocketClient\Debug\vc110.idb
?????文件?????430080??2014-11-06?17:04??SocketClient\SocketClient\Debug\vc110.pdb
?????文件???????4014??2014-11-05?11:07??SocketClient\SocketClient\SocketClient.vcxproj
?????文件????????944??2014-11-05?11:07??SocketClient\SocketClient\SocketClient.vcxproj.filters
?????文件????????382??2014-11-05?11:10??SocketClient\SocketClient\SocketClient.vcxproj.user
?????文件???32505856??2014-11-06?21:25??SocketClient\SocketClient.sdf
?????文件????????903??2014-11-05?11:05??SocketClient\SocketClient.sln
????..A..H.?????19968??2014-11-06?21:25??SocketClient\SocketClient.v11.suo
?????文件??????33280??2014-11-06?21:22??SocketServer\Debug\SocketServer.exe
?????文件?????322672??2014-11-06?21:22??SocketServer\Debug\SocketServer.ilk
?????文件?????560128??2014-11-06?21:22??SocketServer\Debug\SocketServer.pdb
?????文件????????594??2014-11-06?21:22??SocketServer\SocketServer\Debug\cl.command.1.tlog
............此處省略37個文件信息
- 上一篇:c++網絡編程
- 下一篇:算法圖解-Python語言版本C/C++也可以看懂
評論
共有 條評論