python 网络编程
来源:互联网 发布:网络电视机顶合 编辑:程序博客网 时间:2024/06/07 00:28
今天要扩展的是python的网络编程
先介绍一下Socket
什么是socket?
Socket 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的,例如我们每天浏览网页、QQ 聊天、收发 email 等等。要解决网络上两台主机之间的进程通信问题,首先要唯一标识该进程,在 TCP/IP 网络协议中,就是通过 (IP地址,协议,端口号) 三元组来标识进程的,解决了进程标识问题,就有了通信的基础了。
创建 socket
首先要创建 socket,用 Python 中 socket 模块的函数 socket
就可以完成:
import socket #for sockets#create an AF_INET, STREAM socket (TCP)s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
函数 socket.socket
创建一个 socket,返回该 socket 的描述符,将在后面相关函数中使用。该函数带有两个参数:
- Address Family:可以选择
AF_INET
(用于 Internet 进程间通信) 或者AF_UNIX
(用于同一台机器进程间通信) - Type:套接字类型,可以是
SOCKET_STREAM
(流式套接字,主要用于 TCP 协议)或者SOCKET_DGRAM
(数据报套接字,主要用于 UDP 协议)
先创建一个服务套接字,让其他的机器连接
import socket
import threading
#创建服务套接字
ss = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
print("建立服务套接字")
ss.bind(("localhost",9999))
print("绑定端口和主及")
ss.listen(5)
print("开始等待客户的请求")
c = ss.accept()
print("某个用户连接了我")
def myrecv(c):
while True:
msg = c[0].recv(1024)
print(msg.decode())
threading._start_new_thread(myrecv,(c,))
while True:
msg = input()
c[0].send(msg.encode())
再创建一个连接主机的服务
import socket
import threading
#创建客户套接字
c = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
print("创建客户套接字")
c.connect(("192.168.11.59",9999))
print("连接成功")
def myrecv(c):
while True:
msg = c.recv(1024)
print(msg.decode())
threading._start_new_thread(myrecv,(c,))
while True:
msg = input()
c.send(msg.encode())
这样就完成了一个1v1的聊天功能,如果想要实现多人聊天的话,需要一个服务器端。
import socketimport threadingss=socket.socket(socket.AF_INET,socket.SOCK_STREAM)ss.bind(("0.0.0.0",9999))ss.listen(10)msg=Nonelock=threading.Lock()con=threading.Condition(lock)def server_recv(c,a): global msg while True: msg1=c.recv(3000) con.acquire() msg=msg1 msg=str(a)+msg1.decode() con.notify_all() con.release()def server_send(c,a): global msg while True: con.acquire() con.wait() con.release() c.send(msg.encode())while True: c,a=ss.accept() threading._start_new_thread(server_recv,(c,a)) threading._start_new_thread(server_send,(c,a))
这样多人聊天就创建好啦,如果想要了解更多,可以去http://www.runoob.com/python/python-socket.html里面看
- Python网络编程例子
- Python的网络编程
- python网络编程
- Python网络编程
- Python的网络编程
- python_网络编程
- Python PycURL 网络编程
- python中的网络编程
- Python网络编程基础
- python网络编程
- python 网络编程
- Python网络编程基础
- python网络编程解疑
- python 网络编程1
- python网络编程
- python 网络编程学习
- [Python] 网络编程(Socket)
- python 网络编程
- 读书 | 如何像沉迷游戏一样对工作上瘾?
- 我看jquery
- 笔记(一)初识C++
- unity创建树
- Keil工程下各个后缀名文件的作用
- python 网络编程
- Simplescalar在Ubuntu12.04 64位上的安装流程
- run as server和run as run java application
- Python Socket,并完成简单的聊天室
- 知识图谱三元组抽取
- utf8编码原理详解
- 数据结构与算法3:链表2
- 人脸识别 -- 绪论之《生物特征识别技术》开篇
- error LNK2019: 无法解析的外部符号 __imp____glutInitWithExit@12,该符号在函数 _glutInit_ATEXIT_HACK@8 中被引用