socket建立TCP连接

TCP连接建立客户端与服务器端的连接

话不多说直接上代码

做一个互相聊天的代码,两边同时按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亲测成功运行。
谢谢支持!

猜你喜欢

转载自blog.csdn.net/qq_43371004/article/details/83414438