话不多说直接上代码
做一个互相聊天的代码,两边同时按1后进入聊天接受环节。
由客户端最先向服务端发送数据,然后服务端收到内容后,服务端就可以向客户端发送内容了。
不能同时发送,这一边发,另一边只能收。
服务器端:
import socket
host = '127.0.0.1'#ip地址
port = 8088#端口
def Link():
'''
建立tcp连接,绑定IP和端口,可以进行网络通信,
例如IP:cmd中ipconfig查看本机ipv4地址
'''
global s #定义全局变量,为Function()方法使用
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)#设置TCP连接
s.bind((host,port))#绑定端口和地址,注意双括号。
s.listen(5)#开始监听
print("服务端已开启,等待客户端连接...")
global conn
conn, addr = s.accept()
#接受连接,将连接的conn相当于客户端的名字 #print(conn)
#addr是一个包含ip和port的元组 #print(addr)
print("客户端已连接...\n")
def Function(s,conn):
print('输入你想操作的目录编号\n\
1聊天\n\
2你可以实现其他功能\n')
while 1:
data_num = int(input('请输入你要操作的序号:'))
if data_num ==1:
while 1:
info = conn.recv(1024).decode()
print('收到:'+info)
if info=='exit':
#收到客户端发来的exit时候结束循环
break
send_mes = input('发送:')
if send_mes =='exit':
#当主动发送exit时结束循环
conn.send(send_mes.encode())
break
else:
conn.send(send_mes.encode())
elif data_num==2:
print("自己写其他功能!")
conn.close()#为了我的【tcp三次握手四次挥手】加的关闭连接。
print("此时tcp连接已经断开了,你可以按功能1测试。")
#实现其他功能
pass
else:
print("输入有误!")
if __name__=="__main__":
Link()
Function(s,conn)
客户端
import socket
host = '127.0.0.1'#设置ip
port = 8088 #端口
def Link():
'''
建立tcp连接,绑定IP和端口,可以进行网络通信,
例如IP:本机地址ipv4!
'''
global s
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#连接服务端
s.connect((host,port))
def Function(s):
'''
实现与服务器端的一些通讯功能和对服务器内容的查看!
'''
print('输入你想操作的目录编号\n\
1聊天\n\
2你可以实现其他功能\n\
3断开连接')
while 1:
data_num = int(input('请输入你要操作的序号:'))
if data_num ==1:
while 1:
send_mes=input('发送:')
if send_mes =='exit':
s.send(send_mes.encode())
#发送的是exit时候结束循环
break
else:
s.send(send_mes.encode())
info = s.recv(1024).decode()
if info =='exit':
#收到客户端发的exit时候结束循环
break
else:
print("收到:"+info)
elif data_num==2:
print("自己写其他功能!")
s.close()#为了我的【tcp三次握手四次挥手】加的关闭连接。
print("此时tcp连接已经断开了,你可以按功能1测试。")
else:
print("输入有误!")
if __name__=="__main__":
Link()
Function(s)
print("连接断开")
s.close()
注意1: 客户端程序和服务器端程序需要同时打开两个IDLE,分别new file复制上面代码运行。
客户端与服务器端不能在同一个IDLE下打开的两个new file中运行,如果运行了会出现一下错误:
Traceback (most recent call last):
File “C:\Users\JF\Desktop\csdncilent.py”, line 46, in
Link()
File “C:\Users\JF\Desktop\csdncilent.py”, line 13, in Link
s.connect((host,port))
ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝,无法连接。
注意2: 如果socket TCP连接这种报错,可以换个端口号试试。
OSError: [WinError 10048] 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。
python3亲测成功运行。
谢谢支持!