Python3.6:socket实现简单传输数据

作者: james_chang | 来源:发表于2018-02-09 17:04 被阅读14次

客户端:

import socket

flag = True

# 生成socket对象
client = socket.socket()

# 链接要链接的ip和port(端口)
client.connect(('localhost', 6666))

# while循环
while flag:

    # 获得用户输入
    msg = input("Enter your message('q' for quit):").strip()

    # 判断是否为空
    if len(msg) == 0:
        print("Message can't be empty")
        continue

    # 发送数据
    client.send(msg.encode())

    # 判断是否为'q'
    if msg != 'q':

        # 接收数据
        data = client.recv(1024)

        # 打印接收到的数据
        print(data)

    else:
        # 条件为False
        flag = False

# 关闭socket链接
client.close()
print('Server Closed')

服务器端:

import socket

flag = True

# 生成socket对象
server = socket.socket()

# 绑定ip和端口
server.bind(('localhost', 6666))

# 监听绑定的端口
server.listen()

# 方便识别打印一个我在等待
print("I'm waiting the connect...")


# 这里用两个值接受,因为链接上之后使用的是客户端发来请求的这个实例
# 所以下面的传输要使用conn实例操作
conn, addr = server.accept()

# 打印链接成功
print('Connect success!')

# 进入循环
while flag:

    # 接受数据并赋给data
    data = conn.recv(1024).decode()

    # 判断
    if data != 'q':

        # 打印收到数据
        print('收到:', data)

        # 发送我收到数据了
        conn.send('Send Successed!'.encode())

    else:

        # 条件为False
        flag = False

# 关闭socket链接
server.close()

先运行服务器端,后运行客户端:



需要注意的几个点:

编码问题,因为只支持bytes类型数据,每次发送之前要encode()一下,接收之后要decode()一下

服务器端的while判断要放在accept()之后,也就是说不能将accept()放在循环中,如果包进循环中,只能传输一次就会卡住,第二次循环就会再等待连接

不能send空,如果为空的话服务器端recv会一直等待,也就是说客户端什么都不输入直接回车就会卡住,可以通过判断避免这种情况

这里呢是客户端断开服务器端也会断开,这里是我自己写的断开,即使不写,客户端断开服务器端也会断开,可以在accept上再添加一个循环,修改一下服务器端就可以了

import socket

flag = True

# 生成socket对象
server = socket.socket()

# 绑定ip和端口
server.bind(('localhost', 6666))

# 监听绑定的端口
server.listen()

while flag:

    # 方便识别打印一个我在等待
    print("I'm waiting the connect...")

    # 这里用两个值接受,因为链接上之后使用的是客户端发来请求的这个实例
    # 所以下面的传输要使用conn实例操作
    conn, addr = server.accept()

    # 打印链接成功
    print('Connect success!')

    # 进入循环
    while flag:

        # 接受数据并赋给data
        data = conn.recv(1024).decode()

        # 判断
        if data != 'q':

            # 打印收到数据
            print('收到:', data)

            # 发送我收到数据了
            conn.send('Send Successed!'.encode())

        else:
            print('This connection is broken')
            break

# 关闭socket链接
server.close()

这样就实现了客户端断开服务器端不会断开,服务器一直等待客户端连接

转载请注明出处

python自学技术互助扣扣群:670402334

下一篇:socket实现简单ssh客户端

相关文章

  • Python3.6:socket实现简单传输数据

    客户端: 服务器端: 先运行服务器端,后运行客户端: 需要注意的几个点: 编码问题,因为只支持bytes类型数据,...

  • ios socket笔记

    主要是有以上三个函数来实现socket开启,传输接收数据以及关闭socket

  • HTTPS从入门到放弃

    使用socket进行tcp数据传输的简单过程 Socket是TCP/UDP传输层的API, HTTP是在tcp上的...

  • 数据传输方式(socket 、webservice 及 http

    1 数据传输方式 1.1 socket传输的定义和其特点 所谓socket通常也称作"套接字",实现服务器和客户端...

  • IPC之基于TCP协议的Socket的使用

    Socket也称为套接字,可以用来实现进程间的通信。Socket本身支持传输任意字节流。 demo实现了简单的跨进...

  • Python3.6:socket实现文件传输

    既然我们实现了简单的数据传输和简单的ssh客户端,那么我们能不能实现传输文件呢? 先理一理思路,实现简单ssh客户...

  • iOS Socket 简单即时通讯

    本位将简单实现一下循环接受数据的实现.对Socket不做过多解释,了解Socket实现了循环接受数据 www.j...

  • nodejs的socket.io学习笔记

    socket.io学习笔记 1。服务器信息传输;2。不分组,数据传输;3。分组数据传输;4。Socket.io难点...

  • 2019-08-22

    1、网络通信就是使用Socket来实现 主机地址 端口号 数据的传输过程通过输入输出流来实现 Serv...

  • iOS HTTP

    Socket和HTTP区别Socket:长连接 数据传输实时 开发效率低 数据传输效率高(可以完全自定义请求和响...

网友评论

    本文标题:Python3.6:socket实现简单传输数据

    本文链接:https://www.haomeiwen.com/subject/agwftftx.html