简单TCP服务器

新建Win32 Console Project,工程名tcp,空工程,新建文件tcp.cpp,粘贴以下代码。

在Project Settings的C/C++页面的Category下拉框中选择Code Generation,选择Use Run-time library:Debug Multithread。在Link页面的Catagory下拉框中选择General,在Object/library moudules后面增加ws2_32.lib。注意前面加个空格。

编译运行后再打开一个dos窗口输入telnet 127.0.0.1  20248。

//  tcp.cpp : Defines the entry point for the console application.
//

#include  < afxwin.h >
#include 
< stdio.h >
#include 
< WINSOCK2.H >

UINT ServerThread(LPVOID pParam);

int  main( int  argc,  char *  argv[])
{
    
int nResCode = 0;
    printf(
"Press "a" to terminate program ");
    
    AfxBeginThread(ServerThread,
0);
    
do 
    
{
    }
 while (getchar() != 'a');
    
    
return nResCode;
}


UINT ServerThread(LPVOID pParam)
{
    printf(
"Starting up TCP server ");
    
    
//WSAStartup初始化WinSock
    
//第一个参数指定允许使用的WinSock规范的最高版本
    WSADATA wsaData;
    
int wsaret  = WSAStartup(MAKEWORD(1,1),&wsaData);

    
if (wsaret != 0)
    
{
        
return 0;
    }


    sockaddr_in local;
    local.sin_family 
= AF_INET;                    //地址族
    local.sin_addr.s_addr = INADDR_ANY;            //网际IP地址
    local.sin_port = htons((u_short)20248);        //使用的端口,转换为网络序

    
//创建SOCKET
    SOCKET server;
    server 
= socket(AF_INET, SOCK_STREAM, 0);
    
if (server == INVALID_SOCKET)
    
{
        
return 0;
    }

    
    
//将刚创建的套接字和sockaddr_in结构联系起来
    
//它主要使用本地地址及一个特定的端口来连接套接字
    if (bind(server,(sockaddr*)&local,sizeof(local)) != 0)
    
{
        
return 0;
    }


    
//listen侦听来自客户端的连接
    
//第二个参数表示最大连接数
    if (listen(server,10!= 0)
    
{
        
return 0;
    }


    
//客户端套接字
    SOCKET client;
    sockaddr_in from;
    
int fromlen = sizeof(from);

    
while (true)
    
{
        
char buffer[512];
        
char* cServerIP = inet_ntoa(local.sin_addr);
        
char* cClientIP = inet_ntoa(from.sin_addr);
        
        
//接收客户端连接
        client = accept(server, (struct sockaddr*)&from,&fromlen);

        sprintf(buffer,
"Congratulation! Your IP is %s  ",cClientIP);

        
//向客户端发送字符串
        send(client, buffer, strlen(buffer),0);

        printf(
"Connection from %s ",cClientIP);

        
//发送信息
        int i = 0;
        
for (i = 10;i>0;)
        
{
            sprintf(buffer,
"       ");
            send(client,buffer,strlen(buffer),
0);

            sprintf(buffer,
"%d ",i--);
            send(client,buffer,strlen(buffer),
0);
            Sleep(
1000);
        }


        
//关闭客户端连接
        sprintf(buffer,"Terminate %s by %s ",
            cClientIP,
            cServerIP);
        printf(buffer);
        send(client, buffer, strlen(buffer),
0);

        closesocket(client);
    }


    closesocket(server);

    
//终止对WinSock的调用
    WSACleanup();
    
return 0;
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值