Python Socket Programming 服务器/客户端

基于UDP/TCP的套接字编程demo

UDP 客户端/服务器

一个简单的基于UDP协议的客户端和服务器应用的进程通信。

逻辑:

客户端会给服务器发送小写的英文字母,服务器接受后,把它转化成大写再返回给客户端,客户端输出这组数字。由于Python3已经明确区分了str类和bytes类,因此发送的是字节。

UDP服务器:

from socket import *

udp_server_socket = socket(AF_INET, SOCK_DGRAM)
udp_server_port = 9600
name = gethostname()
udp_server_socket.bind((‘‘, udp_server_port))

while True:
    print(‘The Sever is ready to receive‘)
    # 这段代码会一直处于阻塞状态,除非收到了响应
    message, client_address = udp_server_socket.recvfrom(2048)
    print(‘Client Address:‘, str(client_address), ‘Coming!‘)
    modified_message = message.upper()
    udp_server_socket.sendto(modified_message, client_address)

UDP客户端

from socket import *

server_ip = ‘127.0.0.1‘
server_port = 9600

udp_client_socket = socket(AF_INET, SOCK_DGRAM)
message = b‘hello‘
# 发送给服务器
udp_client_socket.sendto(message, (server_ip, server_port))

# 接受服务器的返回内容
modified_message, sever_address = udp_client_socket.recvfrom(2048)
print(modified_message)

udp_client_socket.close()

TCP 客户端/服务器

一个简单的基于TCP协议的客户端和服务器应用的进程通信。

TCP服务器

from socket import *

tcp_server_socket = socket(AF_INET, SOCK_STREAM)
tcp_server_port = 9700

tcp_server_socket.bind((‘127.0.0.1‘, tcp_server_port))
tcp_server_socket.listen(1)

while True:
    # 等待连接
    print(‘Waiting for connecting!‘)
    # 建立TCP连接
    connection_socket, addr = tcp_server_socket.accept()
    print(‘Connected from:‘, addr)
    message = connection_socket.recv(2048)
    print(‘The Sever is ready to receive‘)

    upper_message = message.upper()
    print(upper_message)
    connection_socket.send(upper_message)
    connection_socket.close()

TCP客户端

from socket import *

server_ip = ‘127.0.0.1‘
server_port = 9700

tcp_client_socket = socket(AF_INET, SOCK_STREAM)
tcp_client_socket.connect((server_ip, server_port))

message = b‘hello‘
# 发送给服务器
tcp_client_socket.send(message)

# 接受服务器的返回内容
modified_message = tcp_client_socket.recv(2048)
print(‘Modified Message:‘, modified_message)

tcp_client_socket.close()

小结

在写这个demo的时候,犯了几个小错误:

  1. 在TCP的服务端socket中,我的recv方法不是在连接的connection_socket上操作的,导致了一个错误:Transport endpoint is not connected

    类似:https://stackoverflow.com/questions/35969714/error-transport-endpoint-is-not-connected-python-sockets

  2. 在TCP的客户端socket中,我的recv方法想当然的接受了两个参数,导致错误。 这显示是因为没有区分好TCP和UDP的Socket的不同点。

    由于TCP是面向连接的,每次在读写的socket对象,不必填入目标主机的地址,只需要直接读写数据即可,因此只能接受一个参数(data)。

    而UDP是无连接,每次需要在发送数据需要时填入目标主机的地址,接受时始终也是两个参数: data和address。

原文地址:https://www.cnblogs.com/crb912/p/9060670.html

时间: 2024-10-07 17:54:13

Python Socket Programming 服务器/客户端的相关文章

【windows socket+HTTP服务器客户端】

Windows Socket+HTTP服务器客户端 Winsock是 Windows下套接字标准.                 1.HTTP协议:          HTTP是基于客户端/服务器的请求,响应协议.        请求:由客户端向服务器发起,指定了要从服务器获取的资源.请求包含了协议首部,指明了客户端处理能力信息,如可以处理的文件类型,支持的语言,编码方式等.        响应:服务器收到客户端的请求后,解析这个请求,构造响应,并发送给客户端.响应同样包含了协议首部,指明了服

【windows socket+UDP服务器客户端】

Windows Socket+UDP服务器客户端 Winsock是 Windows下套接字标准.                    1.UDP socket编程:          UDP(用户数据报协议)是一个无连接,不可靠的数据传输,其特点是简单,快捷.相比与TCP,UDP不需要建立连接(不需connect.accept函数),数据发送接收之后,不需要终止连接.基于UDP的程序,避免了TCP运行的开销,在效率与速度上具有更好的表现.          UDP是无连接的,可能会有数据的丢失

【windows socket编程+服务器客户端】

Windows Socket编程与服务器客户端示例 Winsock是 Windows下套接字标准. Socket套接字基于计算机网络,提供同一系统上不同进程或由局域网连接在一起的不同机器上的进程间通讯功能.如下图: 套接字通过IP地址,Port端口号标识,通过这个标识可以在整个局域网定位一个套接字,通过套接字进程便可以相互传输数据.如:进程A与进程B之间欲通过套接字通信,首先进程A创建一个有IP地址,端口号唯一标识的套接字,进程B同样创建一个有IP地址,端口号唯一标识的套接字,进程A,B便可以通

Java 利用 Socket 实现服务器客户端聊天

Socket是网络编程中最基本的通信接口,常用的网络辅助类,比如URL等之类,其底层还是基于Socket来实现的. 而Socket,形象来说,就是连接通信的两端,比如这样 S<==>S,中间的通道就是网络了,而简单地利用Socket,我们就可以来实现一个简单的聊天功能 具体效果看下图: 这只是在本地中试用的效果,如果加上UI界面,其实就可以做成一个聊天的小应用了. 1. Server 端主要是利用ServerSocket的accept方法来等待客户端的连接,如果客户一直没有连接,则会在这里等待

python socket编程之客户端和服务端简单交互

服务端 #_*_ coding:utf-8 _*_ #导入socket模块 import socket # 创建socket对象 sk = socket.socket() #绑定侦听的IP和端口号 ip_port = ('192.168.9.213',9999) sk.bind(ip_port) #最大连接数 sk.listen(5) #接受请求,接受请求的时候可以获取到客户端的socket对象,以及客户端的IP和端口 #通过while循环,让服务端一直接受客户端请求 print "正在等待客户

python socket 轻量级服务器

由于Python天生的优点,特别适用于快速实现功能. #!/usr/bin/python2.7 import sys import time import socket #import modbus import threading import select class thread(threading.Thread): def __init__(self,sock): threading.Thread.__init__(self) #self.commond=modbus.modbus()

利用python socket管理服务器

一.socketserver的handle方法处理请求 二.实例化socketserver的handle方法 def funzioneDemo():     server = ThreadingServer((HOST,PORT),Handler)     server.serve_forever() 三.创建daemon进程 os.setsid() #该方法做一系列的事:首先它使得该进程成为一个新会话的领导者,接下来它将进程转变一个新进程组的领导者,最后该进程不再控制终端, 运行的时候,建立一

python socket连接服务器获取回显

军训回来了,皮皮..... import socket import sys try: s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #创建一个服务器之间的连接,使用TCP连接 except socket.error as e: print("报错了?,我也很无奈啊"+e) sys.exit() host="www.baidu.com" port=80 try: jsip=socket.gethostbynam

python socket之tcp服务器与客户端demo

python socket之tcp服务器与客户端demo 作者:vpoet 日期:夏季 server: # -*- coding: cp936 -*- ''' 建立一个python server,监听指定端口, 如果该端口被远程连接访问,则获取远程连接,然后接收数据, 并且做出相应反馈. ''' import socket if __name__=="__main__": print "Server is starting" sock = socket.socket