资源简介

使用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\link-cvtres.read.1.tlog

     文件          2  2014-11-06 17:04  SocketClient\SocketClient\Debug\link-cvtres.write.1.tlog

     文件          2  2014-11-06 17:04  SocketClient\SocketClient\Debug\link-rc.read.1.tlog

     文件          2  2014-11-06 17:04  SocketClient\SocketClient\Debug\link-rc.write.1.tlog

     文件       1082  2014-11-06 17:04  SocketClient\SocketClient\Debug\link.command.1.tlog

     文件       2600  2014-11-06 17:04  SocketClient\SocketClient\Debug\link.read.1.tlog

     文件        386  2014-11-06 17:04  SocketClient\SocketClient\Debug\link.write.1.tlog

     文件         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个文件信息

评论

共有 条评论