13 网络编程案例——基于TCP的在线聊天程序(1)

本文详细介绍了网络编程的基本概念,包括TCP/IP协议、端口、Socket编程,并通过一个Python示例展示了如何建立服务器与客户端进行数据交互。此外,还深入探讨了多线程编程,演示了如何使用Python的threading模块创建和管理线程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#!/usr/bin/env python
# coding: utf-8

1 关键技术

1、互联网TCP/IP协议

2、IP协议和端口

·IP协议
·端口

3、TCP协议和UPD协议

4、Socket:网络编程的一个抽象概念
# 把客户端发过来的字符串加上“Hello”再发回去
import socket, time
import threading

def tcplink(sock, addr):
    print('接收一个来自%s:%s连接请求' % addr)
    sock.send(b'welcome!')
    while True:
        data = sock.recv(1024)
        time.sleep(1)
        if not data or data.decode('utf-8') == 'exit':
            break
        sock.send(('Hello, %s' % data.decode('utf-8')).encode('utf-8'))
        
    sock.close()
    
    print('来自%s:%s连接关闭了' % addr)


# In[ ]:


s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('127.0.0.1', 8887)) # 可以绑定到所有地址!设置为0.0.0.0即可!
# 一个端口被一个socket(网络编程)绑定之后,就不能再被其他socket绑定了!!
# 端口号小于1024需要管理员权限才能绑定!
s.listen(5)
print('等待客户端连接...')
while True:
    sock, addr = s.accept()
    
    t = threading.Thread(target=tcplink, args=(sock, addr))
    t.start()




# 下面是客户端!




import socket,time

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('127.0.0.1', 8887))

print(s.recv(1024).decode('utf-8'))# 打印出welcome!表示连接服务器成功!

for data in [b'Micheal', b'Tracy', b'Sarah']:
    s.send(data)
    print(s.recv(1024).decode('utf-8')) # 你发给服务器,服务器就有一个应答!
    
s.send(b'exit')
s.close()

2 多线程编程

import threading
import time

exitFlag = 0

class myThread(threading.Thread): # 继承父类threading.Thread
    # 重写__init__方法和run方法 创建 线程对象
    def __init__(self, threadID, name, counter):
        threading.Thread.__init__(self)
        
        self.threadID = threadID
        self.name = name
        self.counter = counter
        
    def run(self):
        print('Starting ' + self.name)
        
        print_time(self.name, self.counter, 5)
        
        print('Exiting ' + self.name)
        
def print_time(threadName, delay, counter):
    while counter:
        if exitFlag:
            thread.exit()
        time.sleep(delay)
        print('%s: %s' % (threadName, time.ctime(time.time())))
        counter -= 1



# 创建新线程
thread1 = myThread(1, 'Thread-1', 1)
thread2 = myThread(2, 'Thread-2', 2)

# 开启线程
thread1.start()
thread2.start()
print('\nExiting Main Thread')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值