python编写简单聊天程序

socket模块相关的方法和类

  • socket.socket():返回一个 socket对象。
  • socket.create_connection(address):创建一个连接到给定地址的 socket对象(注意:此处的 address是一个二元元组(host, port)。
  • 注意:上面两点中的 socket指 socket模块,以下的 socket均指 socket对象。
  • socket.bind(address):将 socket对象绑定到给定的地址上。
  • socket.listen():监听 socket绑定的地址,在调用该方法后如果有连接请求,就可以调用 socket.accept()接受连接。
  • socket.accept():在调用 socket.listen()方法后,调用该方法来接受连接请求。
  • socket.connect(address):连接到给定地址。
  • socket.send(bytes):发送二进制数据。
  • socket.recv(bufsize):接受一段 bufsize大小的数据,通常 bufsize是 2的 n次方,如 1024,40258等。

简单的 socket服务器端

import socket


HOST = '127.0.0.1'
PORT = 8888

server = socket.socket()
server.bind((HOST, PORT))
server.listen(1)


print(f'the server is listening at {HOST}:{PORT}')
print('waiting for conntection...')
conn, addr = server.accept()

print(f'connect success addr={addr}')
print('waiting for message')
while True:
    msg = conn.recv(1024)
    print('the clint send:', msg.decode())
    response = input('enter your response: ')
    conn.send(response.encode())
    print('waiting for answer')

简单的 socket客户端

import socket
import sys


try:
    host, port = input('please enter host address like host:port: ').split(':')
except ValueError:
    print('the address is wrong')
    sys.exit(-1)

if len(host) == 0 or len(port) == 0:
    print('the address is wrong')
    sys.exit(-1)
else:
    client = socket.create_connection((host, int(port)))
    
    print('connect successfully. waiting for response...')
    
    client.send(b'hello server.')
    while True:
        response = client.recv(1024)
        print('the response is:', response.decode())
        msg = input('please enter a answer: ')
        client.send(msg.encode())
        print('waiting for response...')

运行截图:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏流柯技术学院

TestNG官方文档中文版(5)-测试方法/类和组

5 - Test methods, Test classes and Test groups 5.1 - Test groups TestNG容许执行复...

1331
来自专栏Urahara Blog

Web For Pentester - Directory traversal & File Include Part Tips

2876
来自专栏JavaEdge

JMM1、基础与概念2、重排序6、锁7、java concurrent包的通用化的实现模式7、final8、双重检查和延迟优化

3109
来自专栏mySoul

Java入坑指南

最重要的api文档 https://docs.oracle.com/javase/10/docs/api/overview-summary.html

1102
来自专栏落影的专栏

静态库与动态库的思考

前言 在上文《编译与链接过程的思考》评论中暴走大牙提到了静态库和动态库依赖的问题,还在群里提了几个测试样例和测试工程。 大致介绍下测试工程和如何进行测试: ...

3896
来自专栏java一日一条

Java中Volatile关键字详解

  可见性是一种复杂的属性,因为可见性中的错误总是会违背我们的直觉。通常,我们无法确保执行读操作的线程能适时地看到其他线程写入的值,有时甚至是根本不可能的事情。...

1021
来自专栏Java 源码分析

synchronized 原理分析

synchronized 原理分析 1. 在阅读源码时做了大量的注释,并且做了一些测试分析源码内的执行流程,由于博客篇幅有限,并且代码阅读起来没有 IDE 方...

2563
来自专栏猛牛哥的博客

快手(AAU)更新记录v2.9.1.12

1763
来自专栏土豆专栏

Java面试之基本概念(一)

首先heap是堆,stack是栈,stack的空间是由操作系统自动分配和释放,heap的空间是手动申请和释放的;heap的空间是手动申请和释放的,heap常用n...

2617
来自专栏一“技”之长

GCC编译过程记 原

      对于编程工作者来说,GCC是一个熟悉的名字,它的全称是“GNU Compiler Collection”。GCC是一组编译器集合,目前其支持C、C+...

1442

扫码关注云+社区

领取腾讯云代金券