socket本地模拟服务器+客户端(二)

建立两个py文件,分别打开两个cmd界面,即可进行通信。服务器端运用多进程,连续不断的处理从客户端接收到的数据;客户端通过一个list不断给客户端发送数据。

(每个连接都必须创建新线程(或进程)来处理,否则,单线程在处理连接的过程中,无法接受其他客户端的连接。)本例中,多进程其实没有起到作用。

代码以及解释如下:

#socket服务器端程序
import socket
import time
from multiprocessing import Process         #多进程和多线程一样的用法

def tcplink(sock1,addr1):                   #新建一个函数,用来接收客户端发来的信息
    print(‘Accept new connection......‘)
    sock1.send(b‘welcom‘)                   #若连接建立成果,服务器给客户端发送一个welcome
    while 1:                                #服务器持续接收客户端发送过来的数据,直到服务器收到exit时,退出不在接收数据
        data = sock1.recv(1024)             #接收数据
        time.sleep(1)                       #延时1s

        ‘‘‘data为客户端发送给服务器的数据,服务器给客户端发送hello,%data ,全部转为utf-8编码‘‘‘
        sock1.send((‘hello,%s‘%data.decode(‘utf-8‘)).encode(‘utf-8‘))

        if not data or data.decode(‘utf-8‘) == ‘exit‘:
            break

    sock1.close()                           #连接关闭
    print(‘connection form %s is close....‘%addr1)

if __name__ == "__main__":
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)           #建立一个套接字
    ‘‘‘监听端口127.0.0.1表示客户端和服务器必须都为本机才能运行。
    我们要绑定监听的地址和端口。服务器可能有多块网卡,可以绑定到
    某一块网卡的IP地址上,也可以用0.0.0.0绑定到所有的网络地址,还
    可以用127.0.0.1绑定到本机地址。127.0.0.1是一个特殊的IP地址,表
    示本机地址,如果绑定到这个地址,客户端必须同时在本机运行才能连接
    ,也就是说,外部的计算机无法连接进来。端口号需要预先指定。因为我
    们写的这个服务不是标准服务,所以用9999这个端口号。请注意,小于1024
    的端口号必须要有管理员权限才能绑定:‘‘‘
    s.bind((‘127.0.0.1‘, 9999))

    s.listen(1)                                     #同时接收连接的最大数量
    print(‘Waiting for connecting......‘)

    while 1:                                        #服务器通过一个循环来一直接收来之客户端发送的信息
        sock,addr = s.accept()                      #s.accept返回两个数据
        t = Process(target=tcplink,args=(sock,addr))    #多线程
        t.start()                                       #开启多线程
#socket客户端程序
#同chenhang001.py
import socket

s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)        #新建一个套接字
s.connect((‘127.0.0.1‘,9999))                               #建立连接,为什么是双括号

print(s.recv(1024).decode(‘utf-8‘))                         #打印接收到的数据

#发送数据,定义一个list,
for data111 in [b‘chenhang‘,b‘wangyadan‘,b‘wuhankejidaxue‘,b‘wuchangfenxiao‘]:
    s.send(data111)
    print(s.recv(1024).decode(‘utf-8‘))
# for a in range(100):
#     s.send(b(a))

s.send(b‘exit‘)             #发送exit字符,服务器退出接收数据
时间: 2024-12-30 23:47:36

socket本地模拟服务器+客户端(二)的相关文章

本地模拟服务器CDN(静态HTML,CSS,JS)开发

所谓本地开发环境就是和线上cdn(a.longencdn.cn)一样的目录结构和功能,提供了一个本地镜像,开发者直接在本地镜像的对应目录中作开发即可,包括一些html静态文件,css文件及JS文件等.比如说服务器cdn项目目录结构是 a.longencdn.cn/apps/js,  那么我们在本地也和服务器目录一样,访问 a.longencdn.cn 的时候 apache 首先在开发机上寻找文件,找不到去正式环境去 download 文件,一并返回给客户端.a.longencdn.cn/apps

c++下基于windows socket的单线程服务器客户端程序

今天自己用编写了一个简单的c++服务器客户端程序,注释较详细,在此做个笔记. windows下socket编程的主要流程可概括如下:初始化ws2_32.dll动态库-->创建套接字-->绑定地址信息-->服务器进行监听/客户端连接服务器-->数据交换-->关闭套接字对象. 服务器端: 1 #include <Winsock2.h> 2 #include <Ws2tcpip.h> 3 #include <iostream> 4 5 #prag

socket本地模拟UDP 服务器+客户端(三)

UDP: TCP是建立可靠连接,并且通信双方都可以以流的形式发送数据.相对TCP,UDP则是面向无连接的协议. 使用UDP协议时,不需要建立连接,只需要知道对方的IP地址和端口号,就可以直接发数据包.但是,能不能到达就不知道了. 虽然用UDP传输数据不可靠,但它的优点是和TCP比,速度快,对于不要求可靠到达的数据,就可以使用UDP协议. 服务端程序: # 1 创建套接字,并绑定到当地地址 socket,bing # 2 直接接收数据从buffer.Recvfrom(),这个函数接受到数据,和#s

JAVA基础知识之网络编程——-TCP/IP协议,socket通信,服务器客户端通信demo

OSI模型分层 OSI模型是指国际标准化组织(ISO)提出的开放系统互连参考模型(Open System Interconnection Reference Model,OSI/RM),它将网络分为七层:物理层,数据链路层,网络层,传输层,会话层,表示层,应用层 TCP/IP协议 TCP/IP是一系列网络通信协议的统称,其中最核心的两个协议是TCP和IP.TCP称为传输控制协议,IP称为互联网络协议. 网络分层除了OSI模型分层,还有TCP/IP模型分层,将网络划分为四层,应用层.传输层.网际层

【windows socket编程+服务器客户端】

Windows Socket编程与服务器客户端示例 Winsock是 Windows下套接字标准. Socket套接字基于计算机网络,提供同一系统上不同进程或由局域网连接在一起的不同机器上的进程间通讯功能.如下图: 套接字通过IP地址,Port端口号标识,通过这个标识可以在整个局域网定位一个套接字,通过套接字进程便可以相互传输数据.如:进程A与进程B之间欲通过套接字通信,首先进程A创建一个有IP地址,端口号唯一标识的套接字,进程B同样创建一个有IP地址,端口号唯一标识的套接字,进程A,B便可以通

使用Socket通信实现Silverlight客户端实时数据的获取(模拟GPS数据,地图实时位置)

原文:使用Socket通信实现Silverlight客户端实时数据的获取(模拟GPS数据,地图实时位置) 在上一篇中说到了Silverlight下的Socket通信,在最后的时候说到本篇将会结合地图.下面就来看看本文实现的功能: Silverlight 与服务器利用Socket通讯,实时从服务器获取数据(本文中的数据是地理坐标),由于没有GPS,所以本文在服务器写了一个构造新坐标的函数(本文是一个三角函数),然后利用Timer组件,实时调用,得到新的坐标,并将新的坐标发送给客户端,客户端接收到发

Socket 通信原理(Android客户端和服务器以TCP&amp;&amp;UDP方式互通)

ZERO.前言 有关通信原理内容是在网上或百科整理得到,代码部分为本人所写,如果不当,还望指教. 一.Socket通信简介 Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信.两者的最大差异在于,http连接使用的是“请求—响应方式”,即在请求时建立连接通道,当客户端向服务器发送请求后,服务器端才能向客户端返回数据.而Socket通信则是在双方建立起连接后就可以直接进行数据的传输,在连接时可实现信息的主动推送,而不需要每次由客户端想服务器发送请求. 那么,什么是s

Photon服务器引擎(二)socket/TCP/UDP基础及Unity聊天室的实现

Photon服务器引擎(二)socket/TCP/UDP基础及Unity聊天室的实现 我们平时说的最多的socket是什么呢,实际上socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API). 通过Socket,我们才能使用TCP/IP协议.实际上,Socket跟TCP/IP协议没有必然的联系.Socket编程接口在设计的时候,就希望也能适应其他的网络协议.所以说,Socket的出现只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象,

运用socket实现简单的服务器客户端交互

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