python界面编程和网口通信_Python—网络通信编程之tcp通信编程

服务端代码

import socket

# 1.创建流式套接字实例

# server = socket.socket()

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)

# 2.使用bind方法绑定端口号。服务端绑定的ip和port(参数是元组)

server.bind(("127.0.0.1", 8832))

# 3.调用listen方法监听,并指定最大的连接数量。设置监听套接字,创建监听队列

server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # 设置端口重用

server.listen(5)

# 4.等待客户端链接

while True:

print("正在等待客户端链接...")

conn, addr = server.accept()

print("client connent...{0}:{1}".format(addr[0], addr[1]))

# python3.x以上,网络数据的发送接收都是byte类型,如果发送的数据是str类型的则需要进行编码.

conn.send(("连接成功,服务端端口:%s,客户端端口:%s" % (8832, addr[1])).encode())

# 5.收发消息

while True:

data = conn.recv(1024) # 接收客户端发来的消息

# if not data or data.decode("utf-8") == "exit":

if not data or data == b"exit":

break

print(data.decode())

conn.send(("服务端返回信息:%s" % data.decode()).encode()) # 处理客户端数据

conn.close() # 主动关闭连接

# 6.关闭套接字

server.close()

知识点1:设置端口重用:server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)。

知识点2:conn, addr = server.accept()的返回值是一个元组:返回的conn代表一个新的套接字用来和客户端通信。返回的addr是连接的客户端的地址(也是元组,包含ip与端口)。

知识点3:发送send()函数,与接收recv()函数,操作的都是字节串。recv()函数是阻塞函数。

客户端代码

import socket

# 1.socket实例初始化

# client = socket.socket()

client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 2.发起连接:根据服务端绑定的ip和端口,进行连接访问服务端

client.connect(("127.0.0.1", 8832))

# 3.与服务端交互,接收发送信息

while True:

data = client.recv(1024) # 接收主机信息

print(data.decode()) # 打印接收的数据,此处的byte类型数据特指python3.x以上

msg = input("请输入要发送的信息...")

client.send(msg.encode())

if not msg or msg == "exit":

break

# 4.关闭套接字

client.close()

1.服务端与客户端可以一直通信,收发消息。直到客户端输入"exit",客户端退出,服务端等待下一个客户端连接。

2.当第一个客户端与服务端一直连着的时候,第二个客户端无法与服务器连接。直到第一个客户端退出与服务器的连接,第二个客户端才能与服务器连接。

3.当第一个客户端退出时,服务器会立马连接第二个客户端。第二个客户端之前发的信息,服务器就会收到,并返回信息。可能第二个发送端发的信息都在发送缓冲区里。

封装服务端代码

import socket, threading

class Server():

# 创建socket

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)

# 绑定端口号

server.bind(("127.0.0.1", 3120))

# 调用listen()方法监听端口,并限制最大数量连接

server.listen(5)

def tcpLink(self, sock, addr):

print('Connection from %s:%s' % addr)

sock.send(b'Welcome...')

while True:

data = sock.recv(1024)

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

break

print(data.decode())

sock.send(('Received data:{0}'.format(data.decode())).encode())

sock.close()

def tcpServer(self):

while True:

sock, addr = self.server.accept() # 接受一个连接

t = threading.Thread(target=self.tcpLink, args=(sock, addr))

t.start()

if __name__ == "__main__":

tcpserver = Server()

tcpserver.tcpServer()

封装客户端代码

import socket

class Client():

# 建立一个连接,指定TCP方式

client = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)

# 连接服务端的3120端口

client.connect(("127.0.0.1", 3120))

print(client.recv(1024).decode('utf-8'))

def tcpClient(self):

while True:

msg = input("请输入要发送的信息...")

self.client.send(msg.encode())

if not msg or msg == "exit":

break

data = self.client.recv(1024)

print(data.decode())

if __name__ == "__main__":

tcpclient = Client()

tcpclient.tcpClient()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/262178.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

判断是否是控制字符

#include <stdio.h> #include <ctype.h>/* 判断是控制字符&#xff08;ASCII 0-31和127&#xff09;的库函数&#xff1a; 满足指定的条件&#xff0c;返回非0&#xff1b;否则返回0. iscntrl(c) *//**************** 输入&#xff1a;要判断的字符。* 输出&#x…

感冒了

1 浑身发冷 2 大腿酸痛&#xff0c;无力 3 口腔溃疡。在舌头尖上有一个小白点&#xff0c;周围有点红色。 4 有点咳嗽。 5 有浓痰。 转载于:https://www.cnblogs.com/sdgxbooy/archive/2010/01/27/8902970.html

php代码加注释_怎么在php中添加注释

注释在写代码的过程中非常重要&#xff0c;好的注释能让你的代码读起来更轻松&#xff0c;在写代码的时候一定要注意注释的规范。php里面常见的几种注释方式&#xff1a;1.文件头的注释&#xff0c;介绍文件名&#xff0c;功能以及作者版本号等信息/***文件名简单介绍**文件功能…

数据库整理

转载于:https://www.cnblogs.com/cuikang/p/5131531.html

python保存模型_MNIST数据集训练完如何保存成模型文件?

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data # In[12]: #载入数据集 mnist input_data.read_data_sets("E://YangBen//MNIST_data",one_hotTrue) #每个批次的大小 batch_siz…

GridControl动态添加 颜色列

设计器&#xff1a; 核心代码&#xff1a; DataTable dt new DataTable("UniqueValue");dt.Columns.Add("symbol", typeof(Color));dt.Columns.Add("label",typeof(string));dt.Columns.Add("count",typeof(int));for (int i 0; i &…

代码托管使用指南

2019独角兽企业重金招聘Python工程师标准>>> 开源中国 登录https://git.oschina.net/ 点击 “” 增加新的项目出现创建项目界面&#xff0c;按照提示&#xff0c;输入相应内容点击“管理”显示如下界面 启用svn&#xff0c;输入你所设置的地址。 svn://git.oschin…

python3.6.5怎么下载_windows下如何下载并安装Python 3.6.4 ?

点击Download中的Windows&#xff0c;如下图所示&#xff1a; 2、下载exe后缀的可执行文件&#xff0c;根据自己系统选择32位还是64位。 3、32位和64位的版本安装起来没有区别&#xff0c;双击打开后&#xff0c;第一步要记得勾上Add python to Path 选项&#xff0c;意思是把P…

php中接口验证失败,php短信验证失败的原因

随着国民经济的高速发展&#xff0c;短信的应用也逐渐商业化&#xff0c;很多企业、商家开始使用php短信接口来进行推广、营销或内部管理&#xff0c;只是个别的商家在应用php短信接口的时候却遇到了短信发送失败的现象&#xff0c;这到底是因为商家操作有误&#xff0c;还是因…

数据库无法保存中文的解决

1. ALTER DATABASE dbname COLLATE CHINESE_PRC_CS_AI 2. 使用nvarchar, ntext.转载于:https://www.cnblogs.com/cnblogsfans/archive/2010/01/29/1659264.html

1 用存储过程实现分页,除了上一页,下一页,第一页,和末页外还要有go按钮,以及go到那里的文本框。另外还要在Lable显示“当前x页,一共y页”。注意验证控件的使用和 链接存储过程的内容。...

前台部分 <% Page Xlanguage"C#" AutoEventWireup"true" CodeBehind"USEsp_page.aspx.cs" Inherits"12_7" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml…

CentOS6.3中挂载NTFS移动硬盘的经历

2019独角兽企业重金招聘Python工程师标准>>> 鄙人当年用PC硬盘做了一个移动硬盘&#xff08;其实并不方便移动&#xff0c;只是外边包装了一个壳子&#xff0c;可以用USB口访问而已&#xff09;&#xff0c;移动硬盘上存放了一些学习资料。某日想把一部分学习资料拿…

如何在vsc上下载php扩展包,正确的 Composer 扩展包安装方法

问题说明我们经常要往现有的项目中添加扩展包&#xff0c;有时候因为文档的错误引导&#xff0c;如下图来自 这个文档 的&#xff1a;composer update 这个命令在我们现在的逻辑中&#xff0c;可能会对项目造成巨大伤害。因为 composer update 的逻辑是按照 composer.json 指定…

python之33个关键字详解_Python解析、提取url关键字的实例详解

解析url用的类库: python2版本&#xff1a; from urlparse import urlparse import urllib python3版本&#xff1a; from urllib.parse import urlparse import urllib.request 研究了不同的url规则发现&#xff1a;只要在搜索关键字是用嫁接的&#xff0c;查询的关键在解析后…

Apache专用笔记贴

有关apache的一些知识点(例如配置,参数设置等)每每有什么问题都要到google,baidu半天. 其实这些问题自己以前也碰到过很多回,结果就浪费了大量的时候在每次的网上搜索答案上, 而且每次通过搜索得到的答案都不尽相同,有几乎是最优答案的,也有勉强可用的,想再找到以前 认为写的很…

Lodash 中文文档 (v3.10.1) - “Number” 方法

Lodash 中文文档 (v3.10.1) - “Number” 方法 Translated by PeckZegOriginal Docs: Lodash v3.10.1 Docs“Number” 方法 _.inRange(n, [start0], end) 检查 n 是否位于 start 和 end 之间&#xff08;包含 start&#xff0c;但不包含 end&#xff09;。如果未指定 end&#…

给定某年日期及该年第一天是星期几然后显示该年的日历

package lyt; import javax.swing.*; public class Lyt5 { public static void main(String[] args) { // TODO Auto-generated method stub String yearJOptionPane.showInputDialog(null,"请输入年份:","梁燕婷",JOptionPane.QUESTION_MESSAGE); Stri…

当退出python时是否释放全部内存_python如何释放内存

关于Python中的内存释放问题 首先就不得不提到Python解释器在何种情况下会释放变量的内存。Python引用了内存计数这一简单的计数来控制。 python学习网&#xff0c;大量的免费python视频教程&#xff0c;欢迎在线学习&#xff01; 下面是引用计数的知识&#xff1a; 1) 增加引用…

php中的point用法,php strnatcmp()函数的用法总结

这篇文章主要是对php中strnatcmp()函数的用法进行了详细的总结介绍&#xff0c;需要的朋友可以过来参考下&#xff0c;希望对大家有所帮助Definition and Usage定义和用法The strnatcmp() function compares two strings using a "natural" algorithm.strnatcmp()函数…

利用7z来分卷压缩文件

最近做一个发送Email的小工具&#xff0c;里面有个附件的功能&#xff0c; 如果附件太大了&#xff0c;一般都是用winara 分卷压缩的&#xff0c;然后在上传。 如何用程序来实现自动的分卷压缩的呢?因为RAR不是免费的&#xff0c;就上网找了7z 安装好7z,把7z.dll拷贝到程式的目…