码迷,mamicode.com
首页 > 编程语言 > 详细

Python网络编程-Socket简单通信

时间:2018-08-18 20:13:03      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:nec   bsp   简单的   sage   网络   ==   三次   方式   name   

学习python中使用python进行网络编程,编写简单的客户端和服务器端进行通信,大部分内容来源于网络教程,这里进行总结供以后查阅。

先介绍下TCP的三次握手:

技术分享图片 技术分享图片

 

1,简单的发送消息:

服务器端:

import socket

sk = socket.socket()
ip_port = ("127.0.0.1", 8888)
sk.bind(ip_port)
sk.listen(5)
print("正在进行等待接受数据...")
conn, address = sk.accept()
msg = "hello world!"
conn.send(msg.encode())
conn.close()

客户端:

import socket

client = socket.socket()

ip_port = ("127.0.0.1", 8888)
client.connect(ip_port)
data = client.recv(1024)
print(data.decode())

这里并不能连续发送消息,一次连接发送消息后程序终止。

2.1,连续的发送消息(TCP方式

服务器端:

import socket
import random
sk = socket.socket()
ip_port = ("127.0.0.1", 8888)
sk.bind(ip_port)
sk.listen(5)
while True:
    print("正在进行等待接受数据...")
    conn, address = sk.accept()
    msg = "hello world!"
    conn.send(msg.encode())
    while True:
        data=conn.recv(1024)
        print(data.decode())
        if data==bexit:
            break
        conn.send(data)
        conn.send(str(random.randint(1,1000)).encode())
    conn.close()

客户端:

import socket

client = socket.socket()

ip_port = ("127.0.0.1", 8888)
client.connect(ip_port)

while True:
    data = client.recv(1024)
    print(data.decode())
    msg_input=input("please input mesage to send...")
    client.send(msg_input.encode())
    if msg_input== bexit:
        break
    data = client.recv(1024)
    print(data.decode())

使用while函数,来连续的发送消息。

2.2,连续的发送消息(UDP方式

服务器端:

import  socket

#定义udp方式
sk=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
ip_port=("127.0.0.1",8888)
sk.bind(ip_port)

while True:
    data=sk.recv(1024)
    print(data.decode())

客户端:

#udp
import  socket

sk=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
ip_port=("127.0.0.1",8888)
while True:
    msg_input=input("please input message to send...")
    if msg_input==bexit:
        break
    sk.sendto(msg_input.encode(),ip_port)
sk.close()

3,多客户端发送消息(TCP方式)

服务器端:

#tcp
import  socketserver
import random

class MyServer(socketserver.BaseRequestHandler):
    def setup(self):
        pass
    def handle(self):
        conn=self.request
        msg="hello world!"
        conn.send(msg.encode())
        while True:
            data= conn.recv(1024)
            print(data.decode())
            if data== bexit:
                break
            conn.send(data)
            conn.send(str(random.randint(1,1000)).encode())
        conn.close()

    def finish(self):
        pass

if __name__=="__main__":
    server=socketserver.ThreadingTCPServer(("127.0.0.1",8888),MyServer)
    server.serve_forever()

客户端:

#tcp
import socket

client = socket.socket()

ip_port = ("127.0.0.1", 8888)
client.connect(ip_port)

while True:
    data = client.recv(1024)
    print(data.decode())
    msg_input=input("please input mesage to send...")
    client.send(msg_input.encode())
    if msg_input== bexit:
        break
    data = client.recv(1024)
    print(data.decode())

 启动服务器端后,服务器端等待客户端程序连接,我们可以启动多个客户端来连接服务器端。

 

注:内容来源于互联网

Python网络编程-Socket简单通信

标签:nec   bsp   简单的   sage   网络   ==   三次   方式   name   

原文地址:https://www.cnblogs.com/yaoxing365/p/9498405.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!