import socket
import _thread
class Server:
buffer_size = 1024
client_addr=()
server=None
conn=None
global is_chating #监听器
def __init__(self,host :str,port :int):
ip_port=(host,port)
self.is_chating=False
try:
# 声明套接字类型 AF_INET 表示用于网络通信 socket.SOCK_STREAM tcp协议,基于流式的协议
self.server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 对socket的配置使用IP与端口号的配置
self.server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
# 绑定ip与端口
self.server.bind(ip_port)
# 设置最大连接多少个客户端
self.server.listen(5)
print('服务器已建立,正在等待连接')
self.conn,self.client_addr=self.server.accept()
print('已建立来自'+self.client_addr[0]+'的连接,可以发送或接受数据')
# 发送问候
welcome='你好 欢迎进入服务器'
self.send(welcome)
except Exception as e:
print(e.with_traceback())
exit(0)
except :
print("连接失败")
def send(self,msg :str):
try:
if msg =='':
print('发送消息不准为空')
return
self.conn.send(msg.encode('utf-8'))
except ConnectionResetError as s:
print('发生错误 类型:'+s.errno)
except:
pass
def recv(self)->str:
try:
return self.conn.recv(self.buffer_size).decode('utf-8')
except ConnectionResetError as s:
print('发生错误 类型:' + s.errno)
except:
print("发生其他错误")
def close(self):
self.conn.close()
self.server.close()
def cycle_Send(self):
while 1:
if self.is_chating == False:
break
msg=input('')
if msg=='':
continue
self.send(msg)
print(self.right(msg))
if msg=="bye" or msg =='quit' or msg=="再见":
break
self.is_chating = False
def cycle_Recv(self):
while 1:
if self.is_chating == False:
break
msg=self.recv()
if msg=='': #由于发送的消息已经经过判断不为空处理 如果接受到的数据为空 说明连接已断开
print('连接已中断')
self.is_chating = False
break
print(self.left(msg))
if msg=="bye" or msg =='quit' or msg == "再见":
break
self.is_chating = False
def left(slef,msg) -> str:
try:
chat = '<|' + msg + '|\n'
return chat
except:
pass
def right(slef,msg) -> str:
try:
chat = '|' + msg + '|>\n'
return chat.rjust(32)
except:
pass
def interaction(self): # 创建两个线程 形成交互式聊天窗口
try:
print('已经进入聊天室发送\'bye\'或\'再见\'推出聊天')
_thread.start_new_thread(self.cycle_Send,())
_thread.start_new_thread(self.cycle_Recv,())
except:
print("失败")
def menu():
print('------网络通信服务端------\n')
print("1.开启服务器,准备接受会话\n2.关闭连接\n3.退出程序")
if __name__ == '__main__':
#print('1.发送数据')
while 1:
menu()
a = input()
if a == '1':
server = Server('127.0.0.1', 7777)
server.is_chating = True
server.interaction()
while 1: #阻塞主进程,防止主进程结束
if server.is_chating == False:
print('聊天已结束')
break
pass
elif a == '2':
try:
server.close()
del server
print("连接已关闭,请重新建立连接")
except Exception as e:
print("错误代码:"+e)
elif a == '3':
exit(0)
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
Python中的socket通信是一种在计算机网络中实现进程间通信的方法。它基于套接字(socket)API,通过TCP或UDP协议在网络上建立连接并传输数据。 以下是使用Python的socket库进行通信的一般步骤和描述: 创建套接字(socket):使用socket库的socket()函数创建一个套接字对象,并指定使用的协议(如TCP或UDP)和地址族(如IPv4或IPv6)。 绑定地址和端口:对于服务器端,使用bind()函数将套接字绑定到特定的IP地址和端口号上。对于客户端,通常不需要绑定。 监听连接请求(仅适用于服务器端):对于TCP通信,服务器调用listen()函数开始监听来自客户端的连接请求。 接受连接(仅适用于服务器端):使用accept()函数接受客户端的连接请求,并返回一个新的套接字对象以供与客户端进行通信。 连接远程服务器(仅适用于客户端):客户端使用connect()函数与服务器端建立连接,指定服务器的IP地址和端口号。 发送和接收数据:使用套接字对象的send()函数向对方发送数据,使用recv()函数接收对方发送的数据。注意,数据必须按照约
资源推荐
资源详情
资源评论
收起资源包目录
计算机网络 python socket通信.zip (2个子文件)
C.py 4KB
S.py 4KB
共 2 条
- 1
资源评论
童小纯
- 粉丝: 3w+
- 资源: 289
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功