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

使用python排八字 计算八字的相合相冲五行分值等 ... 简介 八字术是一种古老的算命术。它运用阴阳、五行、干支、八卦等理论,把人的出生年月日时转化为八个字,进而推算人的富贵贫贱、祸福吉凶、穷通寿天、名利地位、家庭六亲等方面的情况 八字源自古代的中国,是一种利用天干和地支来准确记录年、月、日、时的方式,由“年干,年支”、“月干,月支”、“日干,日支”、“时干,时支”,共八个干支所组成(共八个字),年、月、日、时... 阅读详情
 想要实现的功能:在服务器端有一个控制台程序(或者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并发送数据就行了。

【verilog语法详解:从入门到精通】 Verilog语法详解:从入门到精通 摘要:本文系统讲解Verilog硬件描述语言的核心语法与应用。Verilog作为数字电路设计标准,具有并行执行、硬件映射和层次化三大特点。文章从基础语法框架入手,详细介绍了模块定义、端口类型(input/output/inout)声明规范,以及线网型(wire)和寄存器型(reg)两种核心数据类型的区别与应用场景。重点讲解了组合逻辑(assign连续赋值)和时序逻辑(always块)的实现方式,包括阻塞赋值(=)与非阻塞赋值(<=)的关键差异。此外,还涵盖了参数( 阅读详情

相关推荐

脱壳--02.exe

程序开始 使用OD打开程序 发现无法利用esp定律 程序直接运行 查找模块间调用 随便找到一个函数的调用 发现是FF15方式调用 所以是vs的程序 vs程序大致分成两种 vs20xx (特征函数:GetSystemTimeAsFileTime)和 vc++6.0(特征函数:GetVersion) 通过链接器版本 发现是vc6.0 直接在GetVersion上下断点 重新运行程序 断点断下 返回到调用处 vc6.0和易语言的第一个CALL都是GetVers...

weixin_45012273的博客 1089

socketserver的基本使用

socketserver的介绍: socketserver是标准库中的一个高级模块 socketserver可以简化创建客户端跟创建服务端的代码 SocketServer内部使用 IO多路复用 以及 “多线程” 和 “多进程” ,从而实现并发处理多个客户端请求的Socket服务端socketserver的使用: 首先导入模块:import socketserver 初始化控制器类Ha...

超级丹的专栏 7152

深入详细分析Skyworks 78113 PAMiD射频方案图

是一种高集成度的射频前端模块,它结合了功率放大器(PA)、双工器(Duplexer)、滤波器和开关等多个组件,主要用于4G LTE移动通信系统中的射频前端链路。是一款典型的PAMiD模块,通过将多个频段的发射(TX)和接收(RX)路径集成在一个模块中,大大减少了传统射频设计中的分立器件,同时提高了信号链路的效率和可靠性。模块化设计的优势PCB空间优化:高集成度设计大幅减小了射频电路的尺寸,适用于紧凑型移动设备。减少设计复杂度:模块化设计减少了器件间的匹配与调试工作,加速产品开发周期。性能稳定性。

weixin_43199439的博客 1434

socketserver

1. 什么是socket socket并不能多并发,只能支持一个用户,socketserver 简化了编写网络服务程序的任务, socketserversocket的再封装。socketserver在python2中为SocketServer,在python3取消了首字母大 写,改名为socketserversocketserver中包含了两种类,一种为服务类(server class),一...

qq_43281189的博客 849

网络编程:SocketServer Socket

ServerSocket类提供了创建服务器套接字的功能,它能够监听特定端口的客户端连接请求,并在有新的连接请求时创建新的Socket实例与之通信。Socket(InetAddress address, int port, InetAddress localAddr, int localPort):创建一个套接字并将其连接到指定的远程地址上的指定远程端口,同时指定本地地址和端口。accept():服务器端接受客户端的连接请求,并返回一个新的Socket,用于与客户端通信。

m0_58379758的博客 1180

开发一个小巧而稳定的Socket Server(C#)

有一些现成的Socket服务端可以供我们使用,例如SuperSocket、FastSocket,甚至是DotNetty。DotNetty是很庞大的,另外两个会小一些。但如果我们并不是要做一个多强大的服务器,只是想简单收发一下数据,能自动重连,能稳定运行就够,那我们不必使用上面的第三方库。 最基础的服务端模板 下面的代码实现了最基础的服务端功能: ServerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, Proto

lweiyue的专栏 3029

SocketServersocket、群聊、TCPserver、UDPserver

1. SocketServer socket编程过于底层,编程虽然有套路,但是想要写出健壮的代码还是比较困难的,所以很多语言都对socket底层API进行封装,Python得封装就是--socketserver模块。它是网络服务编程框架,便于企业级快速开发。 1.1 类的继承关系 socketserver简化了网络服务器的编写。它有四个同步类: TCPServer UDPServer...

野马 1585

vvxcvxc

vxcvxvcxvxcvxc

cxhnihaoa 316

Python 高级编程之网络编程 SocketServer(七)

socket并不能多并发,只能支持一个用户模块是 Python 中用于创建网络服务器的模块,提供了一种简单而一致的接口。它是构建网络服务器的框架,处理了创建、维护和关闭连接的许多底层细节,socketserversocket的再封装。在python2中为在python3种取消了首字母大写,改名为。socketserver中包含了两种类,一种为服务类(server class):前者提供了许多方法:像绑定,监听,运行…… (也就是建立连接的过程)。

匠人精神,持之以恒! 2584

【Java网络编程】TCP通信(SocketServerSocket)和UDP通信的三种数据传输方式

TCP通信协议是一种可靠的网络协议,它在通信的两端各建立一个Socket对象 通信之前要保证连接已经建立(注意TCP是一定要建立连接的) TCP是通过Socket产生I0流来进行网络通信的,所以发送端和接收端的两个流的方向是不一样的,比如客户端和服务器进行通信(通信前要确保建立了连接),然后客户端向服务器发送了“你好帅”,这一次发送数据的过程,它们流的方向是不一样的,针对客户端来说,它是往外发所以用的是输出流,而针对服务器来说,它是接收数据所以用的是输入流。

m0_65277261的博客 2841

【6.0】socketserver实现并发

【一】引入 socket并不能多并发,只能支持一个用户 socketserver 模块是 Python 中用于创建网络服务器的模块,提供了一种简单而一致的接口。 它是构建网络服务器的框架,处理了创建、维护和关闭连接的许多底层细节 socketserversocket的再封装。 【二】socketserver介绍 【1】简介 socketserver在python2中为Socket...

Chimengmeng的博客 1174

Socketserver

1.socketserver介绍 socketserver 是标准库中的一个高级模块, socket...

604

Python——socketsocketserver

转发自python基础之socketsocketserver 引入 Socket的英文原义是“孔”或“插座”,在Unix的进程通信机制中又称为‘套接字’。套接字实际上并不复杂,它是由一个ip地址以及一个端口号组成。Socket正如其英文原意那样,像一个多孔插座。一台主机犹如布满各种插座(ip地址)的房间,每个插座有很多插口(端口),通过这些插口接入电线(进程)我们可以烧水,看电视,玩电脑...

IConquer的博客 1777

socketserver 详细讲解

SocketServer 是 Python 中用于网络编程的模块,它提供了一组类来处理网络请求。它基于 socket 模块提供的低级网络接口,为开发者提供了更高级的接口来处理网络请求。 主要有三种类型的服务器:TCPServer、UDPServer 和 UnixStreamServer。 TCPServer 用于处理 TCP 协议的网络请求。 UDPServer 用于处理 UDP 协议的网络请求...

weixin_42576467的博客 859

SuperSocket基础二

SuperSocket基础(二)-----一个完整的SocketServer项目 由于时间关系未能及时更新,关于SuperSocket,对于初学者而言,一个SuperSock的Server真的不好写。官方文档写的很清晰,如何接受客户端发来的二进制报文并做响应的解析。下面就从一个完整的项目出发,记录SuperSocket的开发过程。 1、项目场景:现有十多个RTU设备,用来监测自来水...

weixin_30666753的博客 417

socket server服务器开发常见的并发模型

只要是做服务器开发,那么常见的模型是通用的,C/C++/go等等都是通用的,因为这是一种设计思想。 其中模型五是实际开发中主流的,而模型六还存在一些弊端需要改进。 模型一:单线程accept(无IO复用) 模型分析: ①主线程执行阻塞accept,每次客户端connect请求连接过来,主线程中的accept响应并建立连接 ②创建连接成功之后,得到新的套接字文件描述符cfd(用于与客户端通信),然后在主线程串行处理套接字读写,并处理业务。 ③在②的处理业务时,如果有新的客户端发送请求连接,会被阻塞,服务器

weixin_49220519的博客 1632

x86 单线并发多拨_Socket Server的N种并发模型汇总

本文主要介绍常见的Server的并发模型,这些模型与编程语言本身无关,有的编程语言可能在语法上直接透明了模型本质,所以开发者没必要一定要基于模型去编写,只是需要知道和了解并发模型的构成和特点即可。在了解并发模型之前,我们需要两个必备的前置知识:socket网络编程多路IO复用机制多线程/多进程等并发编程理论提纲模型一单线程Accept(无I/O复用)模型二单线程Acc...

weixin_34061121的博客 453

面向连接的Socket Server的简单实现

一、基本原理 有时候我们需要实现一个公共的模块,需要对多个其他的模块提供服务,最常用的方式就是实现一个Socket Server,接受客户的请求,并返回给客户结果。 这经常涉及到如果管理多个连接及如何多线程的提供服务的问题,常用的方式就是连接池和线程池,基本流程如下: 首先服务器端有一个监听线程,不断监听来自客户端的连接。 当一个客户端连接到监听线程后,便建立了一个新的连接。 监听线程将新建立的连接放入连接池进行管理,然后继续监听新来的连接。 线程池中有多个服务线程,每个线程都监听一个任务

forfuture1978的专栏 2830

java socket Server TCP服务端向指定客户端发送消息;可查看、断开指定连接的客户端;以及设置客户端最大可连接数量。

java socket Server TCP服务端向指定客户端发送消息;可查看、断开指定连接的客户端;以及设置客户端最大可连接数量

chenduxiu666的博客 5384

Python标准库中最牛逼的模块——socketserver,让你轻松构建网络服务!

socketserver模块是Python网络编程中的一个非常有用的工具。它简化了网络服务器实现,支持TCP和UDP协议,并且可以根据需求使用多线程或多进程来处理客户端请求。通过这个模块,开发者可以专注于业务逻辑的开发,而无需手动处理底层的网络通信。

呱牛 Just do IT 1541

python学习笔记 socketsocket server

一、socket   socket的英文原义是“孔”或“插座”。作为BSD UNIX的进程通信机制,取后一种意思。通常也 称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。在Internet上的主机一 般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。Socket正如

Eugene 736

WeCom_3.0.27.2701.exe

3.0.27版企业微信安装包

国密随机数检测工具,对随机数的随机性进行检测

按照GM/T 0005开发的对随机数的随机性的检测工具。因为是用java swing做的界面,所以运行起来需要jdk的环境

上一篇: Delphi中预想不到的代码
下一篇: [收藏]ORACLE函数大全
AustinLei
博客等级 码龄23年 2粉丝 46原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值