网络编程-socket之TCP协议开发客户端和服务端通信

Posted lz-tester

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络编程-socket之TCP协议开发客户端和服务端通信相关的知识,希望对你有一定的参考价值。

知识点:之前讲的udp协议传输数据是不安全的,不可靠不稳定的,tcp协议传输数据安全可靠,因为它们的通讯机制是不一样的。udp是用户数据报传输,也就是直接丢一个数据包给另外一个程序,就好比寄信给别人,信丢了你也不知道,tcp传输需要先和服务端建立连接,当客户端与服务器连接时,服务器会给出应答,我俩连上了,而且数据传过来还会进行一个数据包数量验证,不一致会重新发送,还有其他种种验证,总之保证了数据传输安全可靠

 

这一章主要介绍使用套接字,编写一个tcp协议客户端和服务端。同样要用到上一章节提到小工具,网络调试助手作为客户端或服务端与编写的服务端或客户端进行通讯验证

 

1、客户端,详情看代码注解:

import socket


def client_main():
    # 创建套接字
    tcp_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)  # SOCK_STREAM代表tcp协议

    # 与服务端建立连接
    server_ip = input(请输入ip地址:)
    server_port = int(input(请输入端口号:))
    tcp_socket.connect((server_ip, server_port))  # 使用connect方法与服务器进行连接

    # 发送数据
    tcp_date = input(请输入要发送的数据:)
    tcp_socket.send(tcp_date.encode(utf-8))

    # 关闭套接字
    # tcp_socket.close()

if __name__ == __main__:
    client_main()

交互效果如下:

技术分享图片

2、服务端开发,下面的代码是先把主流程写通,往下面再附上优化后的服务端代码

import socket

def server():
    # 创建套接字
    tcp_socket_server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

    # 绑定地ip和端口
    tcp_socket_server.bind((‘‘,7785))

    # 监听套接字,因为创建的套接字默认是主动给别人发消息,作为服务端,要随时监听别人发来的请求连接
    tcp_socket_server.listen(128)

    # 当客户端发来与服务端连接成功后,使用accept方法解堵塞,accept返回一个有俩个值的元祖,需要拆包
    # 拆包后,第一个值是新的套接字,也就是连接进来的的客户端,此时新的套接字开始于客户端进行通讯,第二个值是新的套接字这个客户端的ip和端口
    new_socket_clien,new_socket_addres = tcp_socket_server.accept()

    # 接收客户端发来的消息
    tcp_data = new_socket_clien.recv(1024)
    print(tcp_data.decode(gbk))

    # 关闭套接字,先关闭新的套接字,再关闭监听套接字
    new_socket_clien.close()
    tcp_socket_server.close()

if __name__ == __main__:
    server()

交互效果如图:

技术分享图片

 

 3、服务端代码优化,1、循环等待新的客户端到来 2、循环为一个客户端提供服务,困了。明天补上。。。。。

 

以上是关于网络编程-socket之TCP协议开发客户端和服务端通信的主要内容,如果未能解决你的问题,请参考以下文章

Python网络编程之TCP 客户端程序开发

Python网络编程之TCP服务端程序开发

socket tcp/ip 之简单ssh协议

TCP/IP之socket编程

Python开发之-Socket编程

Java Socket编程之TCP