`
hereson
  • 浏览: 1451126 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

实现服务器端的多线程SOCKET Server

阅读更多
实现服务器端的多线程SOCKET Server



想要实现的功能:在服务器端有一个控制台程序(或者Windows服务),与多个客户端程序通讯,其中主线程有一个socket绑定在一个固定端口上,负责监听客户端的Socket信息。每当启动一个客户端程序,客户端发送来一个socket连接请求,server端就新开启一个线程,并在其中创建一个socket与该客户端的socket通讯,直到客户端程序关闭,结束该线程。主线程中的socket在应用程序退出时关闭。

这里是Server端代码的简单示意,展示了如何创建多线程的Socket Server。

#include  "StdAfx.h"  
#include  <stdio.h>  
 
DWORD  WINAPI  AnswerThread(LPVOID  lparam)  
{  
           SOCKET  ClientSocket=(SOCKET)(LPVOID)lparam;  
 
           int  bytesRecv;  
           char  sendbuf[32]="";  
           char  recvbuf[32]="";  
 
           while(1)  
           {  
                       bytesRecv=SOCKET_ERROR;  
                       for(int  i=0;i<(int)strlen(recvbuf);i++)  
                       {   recvbuf[i]=''''\0'''';  }

  
                       while(bytesRecv==SOCKET_ERROR)  
                       {  //Receiving Data
                                   bytesRecv=recv(ClientSocket,recvbuf,32,0);  
                       }  

                     

                       //Write your processing code here
                       send(ClientSocket,recvbuf,strlen(recvbuf),0);  
                       printf("%s\n",recvbuf);  
           }  
           return  0;  
}  
 
int  main(int  argc,char*  argv[])  
{  
           //initialize  Winsock  
           WSADATA  wsaData;  
           int  iRet=WSAStartup(MAKEWORD(2,2),&wsaData);  
           if(iRet!=NO_ERROR)  
                       printf("Error  at  WSAStartup()\n");  
             
           //create  a  socket  
           SOCKET  m_socket;  
           m_socket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);  
           if(m_socket==INVALID_SOCKET)  
           {  
                       printf("Error  at  socket():%ld\n",WSAGetLastError());  
                       WSACleanup();  
                       return  0;  
           }  
 
           //bind  a  socket  
           sockaddr_in  service;  
           service.sin_family=AF_INET;  
           service.sin_addr.s_addr=inet_addr("172.16.3.250");  
           service.sin_port=htons(2501);  
 
           if(bind(m_socket,(SOCKADDR*)&service,sizeof(service))==SOCKET_ERROR)  
           {  
                       printf("bind()  failed.\n");  
                       closesocket(m_socket);  
                       return  0;  
           }  
           else  
                       printf("bind  OK.\n");  
 
           //listen  on  a  socket  
           if(listen(m_socket,20)==SOCKET_ERROR)  
                       printf("Error  listening  on  socket.\n"); 



           else  
                       printf("listening  ok.\n");  
 
           //accept  a  connection  
           SOCKET  AcceptSocket;  
             
           printf("Waiting  for  a  client  to  connect...\n");  
           while(1)  
           {  
                       AcceptSocket=SOCKET_ERROR;  
                       while(AcceptSocket==SOCKET_ERROR)  
                       {  
                                   AcceptSocket=accept(m_socket,NULL,NULL);  
                       }  
                       printf("Client  Connected.\n");  
                         
                       DWORD  dwThreadId;  
                       HANDLE  hThread;  
                         
                       hThread=CreateThread(NULL,NULL,            AnswerThread,  
                                   (LPVOID)AcceptSocket,0,&dwThreadId);  
                       if(hThread==NULL)  
                       {  
                                   printf("CreatThread  AnswerThread()  failed.\n");  
                       }  
                       else  
                       {  
                                   printf("CreateThread  OK.\n");  
                       }  
           }  
           return  0;  
}

 

 

Socket的客户端程序就很简单了,可以使用VB拖一个WinSock控件到Form中,然后连接服务器的Socket并发送数据就行了。

 
分享到:
评论

相关推荐

    c#多线程socket开发(一个服务器对多个客户端)

    C#语言开发多线程Socket服务器端程序,实现一个服务器同时与多个客户端连接对话。这里,我们将详细讲解如何使用C#语言开发多线程Socket服务器端程序,实现一个服务器同时与多个客户端连接对话。 多线程Socket服务器...

    tcpServer_TcpServer_tcp服务器端多线程_

    标签"TcpServer tcp服务器端多线程"进一步强调了这个项目的重点,即TCP服务器的实现及其在处理并发连接时的多线程技术。 综上所述,创建一个TCP服务器端并实现多线程通信涉及网络编程基础、TCP协议理解以及多线程...

    使用TCPServer编写(多线程)socket服务

    在IT行业中,网络编程是不可或缺的一部分,特别是在服务器端开发中,使用TCPServer编写多线程的socket服务是一项基础但重要的技术。本文将详细讲解如何使用TCPServer来实现这样的服务,以及多线程在其中的作用。 ...

    C++多线程SOCKET收发

    多线程SOCKET收发的实现涉及的知识点广泛,包括网络协议、线程同步、异常处理等。实际开发中,还需要考虑如负载均衡、资源管理等高级话题。通过学习和实践这个主题,你可以深入理解C++的多线程特性和网络编程,提升...

    VC实现多线程socket通信

    "VC实现多线程socket通信"这个主题聚焦于如何在Microsoft Visual C++(VC)环境下利用多线程技术进行socket编程,以实现高效且并发的网络通信。 Socket是网络编程中的一个重要概念,它提供了一种进程间通信(IPC)...

    C Socket通信多线程数据双向收发实例VS2010(全部源码)

    1、运用多线程和Socket技术实现Socket Server端侦听多个客户端请求; 2、实现服务器端循环处理客户端不同请求从而实现不同测试要求,并向客户端循环发送数据; 3、实现客户端向服务器端发送不同测试命令,并接收...

    C# 多线程socket 实例

    C#作为一种功能强大的.NET编程语言,提供了丰富的库支持来实现网络通信,其中包括使用socket进行多线程编程。本篇文章将深入探讨如何在C#中利用多线程和socket技术创建一个聊天室实例。 首先,理解`socket`的概念至...

    JAVA写的多线程socket通信程序源码

    在这个名为"JAVA写的多线程socket通信程序源码"的项目中,我们可以看到作者通过Java语言实现了一个基于多线程的Socket通信模型,这通常是服务器和客户端之间的交互。 首先,让我们了解一下Java中的Socket。Socket是...

    java多线程Socket简单实现

    在这个Java多线程Socket实现中,我们将探讨如何创建服务器端(ServerSocket)和客户端(Socket),以及如何使用多线程来处理并发连接。 首先,我们需要理解Java中的`Socket`类和`ServerSocket`类。`ServerSocket`是...

    多线程 SOCKET实例

    在多线程SOCKET实例中,服务器端通常会创建一个主监听线程,负责接受客户端的连接请求。当收到请求时,主监听线程会创建一个新的工作线程来处理这个客户端的通信,而自身则继续监听新的连接。这样,每个工作线程都...

    Qt Socket 多线程代码实现

    本项目标题为“Qt Socket 多线程代码实现”,是一个适合初学者的示例,它展示了如何使用QtcpSocket在多线程环境中构建一个服务器。下面将详细介绍相关知识点。 首先,我们来理解什么是Socket。Socket是一种在不同...

    java socket 多线程 简易实现

    1. **服务器端多线程**:当服务器接收到客户端的连接请求时,为了同时处理多个客户端的请求,服务器端可以创建一个新的线程来处理每个连接。这样,服务器可以并行地为多个客户端服务,提高了服务的并发能力。在Java...

    Socket通讯与多线程处理-完整实例

    1. `server.py`: 服务器端的代码,包含Socket的创建、绑定、监听和接受连接,以及使用多线程处理客户端请求的部分。 2. `client.py`: 客户端的代码,包含Socket的创建、连接以及发送和接收数据的功能。 3. `config....

    同步异步多线程SOCKET通讯

    提供的"同步异步多线程SOCKET通讯.txt"文件可能包含实际的示例代码,展示了如何在Python、Java或C++等语言中实现同步和异步多线程Socket通信。这些代码可能包括创建Server端的Socket监听,创建并管理线程池,处理...

    linux下多线程socket通信(完整源码文件)

    本文将深入探讨如何在Linux环境下实现多线程Socket通信,结合给出的标题和描述,我们可以构建一个基于Ubuntu的客户端和Linux系统ARM板上的多线程服务器的通信模型。 首先,让我们了解Socket的基本概念。Socket是...

    SOCKET+多线程例子

    Socket分为服务器端Socket(Server Socket)和客户端Socket(Client Socket)。服务器端Socket通常会监听一个特定的端口,等待客户端的连接请求;而客户端Socket则负责发起连接,与服务器建立通信链路。 在这个例子...

    c#多线程socket开发(一个服务器对多个客户端).doc

    在C#中,多线程Socket编程是实现网络通信的一种常见方式,尤其适用于需要同时处理多个客户端连接的场景。通过创建多个线程,每个线程专门负责与一个客户端的通信,可以有效提高服务器的并发处理能力。 ### 二、多...

    C# Socket 通信,客户端服务器端

    本教程将深入讲解C#中的Socket通信,包括客户端和服务器端的实现,以及如何通过源码学习相关知识。 首先,我们要理解Socket的基本概念。Socket,也称为套接字,是网络通信中的一个接口,它允许应用程序通过网络发送...

    SOCKET实现多线程TCP连接源码

    `Client`和`Server`则是源代码文件,分别代表TCP客户端和服务器端的实现。客户端通常负责发起连接请求,发送数据并接收服务器响应,而服务器端则负责监听端口,接受连接,处理客户端请求并返回响应。 在服务器端的...

    server_thread.rar_多线程socket_并发

    标题“server_thread.rar_多线程socket_并发”提示我们,这个压缩包中包含了一个使用Unix操作系统下Socket API实现的并发服务器程序,它利用了多线程技术来提高服务的并行处理能力。接下来,我们将深入探讨多线程...

Global site tag (gtag.js) - Google Analytics