网络编程杂项高级

tcp聊天,#server端实现:import socketsk=socket.socket()  # 实例化socket对象address=("0.0.0.0",8000) #设置端口sk.bind(address)  # 绑定IP地址和端口sk.listen(5)  #监听while True:    conn,addr=sk.accept()#conn接受数据,addr获取客户端ip地址    while True:  # 这个循环来实现相互之间聊天的逻辑        try:  #win被中断连接就会异常 linux不会            data=conn.recv(1024) #定义1024字节接受数据,这里的数据只能是bytes类型的数据,否则报错;            if data:  # 假如客户端传递数据过来时                print("-->",str(data,"utf-8"))  # 打印客户端传递过来的数据,需要从bytes类型数据解码成unicode类型的数据                data=bytes(input(">>>"),"utf-8")  # 接收输入的数据并转换成bytes类型的数据                conn.send(data)  # 将bytes类型的数据发送给客户端            else:  # 否则客户端连接的对象,当客户端正常退出,执行了sk.close()时将不会发送数据到服务端                conn.close()  # 这时关闭这个conn对象并退出当前循环等待下一个客户端对象来连接                break        except ConnectionResetError as e:  # 捕获到异常之后,打印异常出来并退出循环等待下一个客户端连接            print(e)            break
#client端实现import socket  # 导入socket模块sk=socket.socket()  # 实例化客户端对象address=("127.0.0.1",8000)  # 设置客户端需要连接的服务端IP地址以及端口sk.connect(address)  # 连接服务端的IP地址以及端口while True:  # 循环实现对话    data=input(">>>").strip()  # 获取用户输入的数据    if data=="exit":  # 如果输入的是exit 关闭该对象并退出程序        sk.close()  # 关闭对象        break  # 退出循环    sk.send(bytes(data,"utf-8"))  # 发送刚输入的数据,要先转换成bytes类型的数据    data=str(sk.recv(1024),"utf-8")  # 接收服务端发送的数据,并将其转换成unicode数据类型    print("-->",data)  # 打印服务端传输过来的数据

原文地址:https://www.cnblogs.com/lc1013/p/10216497.html

时间: 2024-10-12 07:52:15

网络编程杂项高级的相关文章

Unix网络编程(六)高级I/O技术之复用技术 select

I/O复用技术 本文将讨论网络编程中的高级I/O复用技术,将从下面几个方面进行展开: a. 什么是复用技术呢? b. 什么情况下需要使用复用技术呢? c. I/O的复用技术的工作原理是什么? d. select, poll and epoll的实现机制,以及他们之间的区别. 下面我们以一个背景问题来开始: 包括在以前的文章中我们讨论的案例都是阻塞式的I/O包括(fgetc/getc, fgets/gets),即当输入条件未满足时进程会阻塞直到满足之后进行读取,但是这样导致的一个 问题是如果此时进

《网络编程》高级 I/O

本节是套接字的高级 I/O .为套接字设置超时闹钟,使用更加方便的数据传输函数.套接字的 I/O 操作上设置超时有三种方法: 调用 alarm 函数,在它指定超时到期时产生 SIGALRM 信号: 在 select 函数中设置超时阻塞等待 I/O,以替代直接阻塞在 read 或write 调用上: 使用 SO_RCVTIMEO 和 SO_SNDTIMEO 套接字选项(这两个选项只是一部分实现支持): 下面使用 alarm 产生的 SIGALRM 信号为 connect 函数设置超时,当然系统会为

《网络编程》高级 UDP 套接字编程

概述 UDP 是一个无连接.不可靠的数据报协议,任何可靠传输都需由应用程序提供,例如:超时重传.序列号应答机制,但是它在某些场合使用效率高,方便.它支持广播和多播.有关<基本 UDP 套接字编程>参照该文,这里只是在那个基础上,记录一些在 UDP 编程中容易出现的问题. 辅助数据 辅助数据(也称为控制信息)可通过调用 recvmsg 和 sendmsg 函数使用,这里两个函数的定义可参考文章<高级 I/O>,使用 msghdr 结构体中的 msg_control 和 msg_con

Python网络编程之高级篇三

在高级篇二中,我们讲解了5中常用的IO模型,理解这些常用的IO模型,对于编写服务器程序有很大的帮助,可以提高我们的并发速度!因为在网络中通信主要的部分就是IO操作.在这一篇当中我们会重点讲解在第二篇当中提到的IO复用模型,即select机制.其实select机制有一些缺陷,后来产生了一种更加高效的机制epoll,稍后会讲解! 一.select机制 1. 原理:select可以理解成一个监听器,可以监听多个文件描述符.当某个文件描述符的状态发生改变了(可读/可写),操作系统就会发送消息给应用程序,

Python网络编程之高级篇二

在上一篇中,我们深入探讨了TCP/IP协议的11种状态,理解这些状态对我们编写服务器的时候有很大的帮助,但一般写服务器都是使用C/Java语言,因为这些语言对高并发的支持特别好.我们写的这些简单的服务器主要是为了深入学习TCP/IP协议.IO操作以及Python中协程的原理.在上一篇中也提到非阻塞这个概念,在这一篇中,我们继续深入探讨IO模型,因为理解IO操作对我们深入学习异步编程有很大帮助.所以在这一节中我们主要是从Linux内核态和用户态的层面来考虑IO操作时会发生什么样的事情,Linux内

网络编程-Python高级语法-闭包

什么叫闭包?通俗来说就是函数里嵌套函数,从表现形式来看,内部函数引用外部函数的作用域里的变量,那么内部函数就称为闭包 举例说明: 1.闭包=函数块+定义函数时的环境,inner就是函数块,x就是环境 def outer(x): def innner(y): return x+y return innner a = outer(1) # 调用outer函数返回内部函数inner返回的的函数变量 print(a(2)) # 通过函数变量传参并运行内部函数,然后返回函数结果运行结果:3 2.闭包不可以

网络编程杂项2

import socket #模块导入import subprocesssk = socket.socket() #创建套接字sk.bind(('127.0.0.1',8000)) #绑定ip 端口sk.listen(5) while True: #循环接受用户请求 conn,addr = sk.accept() #接受用户信息和ip地址 while True: try: cmd = str(conn.recv(1024),'utf-8') #把用户信息接受utf-8 if cmd: #判断是否

Linux网络编程入门 (转载)

http://www.cnblogs.com/RascallySnake/archive/2012/01/04/2312564.html (一)Linux网络编程--网络知识介绍 Linux网络编程--网络知识介绍客户端和服务端         网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端. 客户端        在网络程序中,如果一个程序主动和外面的程序通信,那么我们把这个程序称为客户端程序. 比如我们使用ftp程序从另外一        个地方获取文件

Linux网络编程入门

(一)Linux网络编程--网络知识介绍 Linux网络编程--网络知识介绍 客户端和服务端 网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端. 客户端 在网络程序中,如果一个程序主动和外面的程序通信,那么我们把这个程序称为客户端程序. 比如我们使用ftp程序从另外一 个地方获取文件的时候,是我们的ftp程序主动同外面进行通信(获取文件), 所以这个地方我们的ftp程序就是客户端程序. 服务端 和客户端相对应的程序即为服务端程序.被动的等待外面的程序来和自己通