实验环境:python2

一、TCP编程

1.建立TCP服务器

①创建TCPServer.py文件

②编写服务器代码

1)创建socket对象,调用socket构造函数

2)绑定ip端口(IP号和端口号)

3)设置最大连接数(准备套接字,以便接受连接请求)

4)使用socket的accept()方法等待客户请求一个链接

5)获取客户请求数据

6)关闭连接

代码如下:

#TCPServer.py
#!/usr/bin/env python #from socket import *
import socket
#开启ip和端口
ip_port = ('127.0.0.1',9999) #1.生成一个句柄(创建socket对象,调用socket构造函数)
sk = socket.socket()
#2.绑定ip端口(ip和端口号)
sk.bind(ip_port)
#3.最多连接数(准备套接字,以便接受连接请求)
sk.listen(5)
#开启死循环
print ('server waiting...')
#等待链接,阻塞,直到渠道链接 conn打开一个新的对象
#专门给当前链接的客户端 addr是ip地址
#4.服务器套接字通过socket的accept()方法等待客户请求一个链接
conn,addr = sk.accept()
#5.获取客户端请求数据
print('successful link,the client address:')
print(addr)
while True: client_data = conn.recv(1024)
#打印对方的数据 print ('receive Clinet Data-> '+client_data) if client_data=='q': break #如果lient_data为空,则跳出循环 #向对方发送数据
conn.send(bytes('client,I\'m server')) #关闭链接
conn.close()
sk.close()

2.建立TCP客户端

①创建TCPclient.py文件

②编写客户端代码

1)连接服务端ip和端口

2)生成套接字

3)请求连接服务端

4)发送数据,接受数据

5)关闭连接

#TCPClient.py

import socket
#连接服务端ip和端口
ip_port = ('127.0.0.1',9999)
#生成一个句柄
sk = socket.socket()
#请求连接服务端
sk.connect(ip_port) while True:
msg = raw_input('Please Input Message:\n') #发送数据
sk.sendall((msg)) if msg=='q': break #如果msg为空,则跳出循环 #接收数据
server_reply = sk.recv(1024)
if not server_reply: break
#打印接收到的数据
print (str(server_reply)) #关闭连接
sk.close()

3.实现服务端-客户端通讯

①运行TCPServer.py

②运行TCPclient.py

③由客户端向服务端发送消息

运行截图如下:

二、UDP编程

1.建立UDP服务器

①创建UDPServer.py文件

②编写服务器代码

1)创建socket对象,调用socket()构造函数UDP需要加参数

2)绑定IP和端口号

3)通讯阶段

4)关闭连接

代码如下:

#UDPServer.py
#!/usr/bin/env python from socket import * HOST = 'localhost'
PORT = 9993 s = socket(AF_INET,SOCK_DGRAM)
s.bind((HOST,PORT))
print '...waiting for message..'
while True:
data,address = s.recvfrom(1024)
print address,data
s.sendto('this is the UDP server',address)
s.close()

2.建立UDP客户端

①创建UDPClient.py文件

②编写UDP客户端代码

1)创建一个socket以连接服务器

2)使用socket的connect()方法连接服务器

3)通过sendto()和recvfrom()方法通信

4)关闭连接

代码如下:

#UDPClient.py
from socket import * HOST='localhost'
PORT=9993
address=(HOST,PORT)
s = socket(AF_INET,SOCK_DGRAM) while True:
message = raw_input('send message:>>')
s.sendto(message,address)
data = s.recvfrom(1024)
print data
s.close()

3.运行客户端-服务端实现通讯

三、结束语

至此使用python-socket编程的TCP和UDP编程已演示结束。

谢谢!

python socket 编程(TCP与UDP)的更多相关文章

  1. python 网络编程 tcp和udp 协议

    1. 网络通信协议 osi七层,tcp\ip五层 tcp\ip五层 arp协议:通过IP地址找到mac地址 2.tcp和udp的区别 tcp协议:面向连接,消息可靠,相对udp来讲,传输速度慢,消息是 ...

  2. Python中Socket编程(TCP、UDP)

    1. TCP协议下的如何解决粘包问题 TCP(transport control protocol 传输控制协议)  使用Nagle算法,将多次间隔较小且数据量小的数据,合并成大的数据块:接受端无法识 ...

  3. python/socket编程之粘包

    python/socket编程之粘包 粘包 只有TCP有粘包现象,UDP永远不会粘包. 首先需要掌握一个socket收发消息的原理 发送端可以是1k,1k的发送数据而接受端的应用程序可以2k,2k的提 ...

  4. PYTHON SOCKET编程简介

    原文地址: PYTHON SOCKET编程详细介绍   Python 提供了两个基本的 socket 模块. 第一个是 Socket,它提供了标准的 BSD Sockets API. 第二个是 Soc ...

  5. [Python_7] Python Socket 编程

    0. 说明 Python Socket 编程 1. TCP 协议 [TCP Server] 通过 netstat -ano 查看端口是否开启 # -*-coding:utf-8-*- "&q ...

  6. python socket编程入门(编写server实例)+send 与sendall的区别与使用方法

    python 编写server的步骤: 1. 第一步是创建socket对象.调用socket构造函数.如: socket = socket.socket( family, type ) family参 ...

  7. Python Socket 编程——聊天室示例程序

    上一篇 我们学习了简单的 Python TCP Socket 编程,通过分别写服务端和客户端的代码了解基本的 Python Socket 编程模型.本文再通过一个例子来加强一下对 Socket 编程的 ...

  8. C++网络套接字编程TCP和UDP实例

    原文地址:C++网络套接字编程TCP和UDP实例作者:xiaojiangjiang 1.       创建一个简单的SOCKET编程流程如下 面向有连接的套接字编程 服务器: 1)  创建套接字(so ...

  9. socket、tcp、udp、http 的认识及区别

    一.先来一个讲TCP.UDP和HTTP关系的 1.TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层. 在网络层有IP协议.ICMP协议.ARP协议.RARP协议和BOOTP协议. 在传输 ...

  10. Python Socket 编程示例 Echo Server

    简评:我们已经从「Python Socket 编程概览」了解了 socket API 的概述以及客户端和服务器的通信方式,接下来让我们创建第一个客户端和服务器,我们将从一个简单的实现开始,服务器将简单 ...

随机推荐

  1. 项目无法运行iPhone5模拟器

    公司没有iPhone5真机, 有人反馈iPhone5有bug, 只能用模拟器验证bug, 但是使用iPhone5项目编译不过,报错: 注释掉相关引用代码,去掉 库

  2. ubuntu 安装搜狗

    先按照这个选择fcitx: https://blog.csdn.net/qq_40563761/article/details/82664851 然后重启 右上角会出现键盘图片点击选configura ...

  3. 15.Git面试题

    1.git常见命令作用 git init 在哪一目录下,就会在该目录下生成.git目录. 注意:git init命令会把当前目录当作库. git status 查看本地库的状态 git add . 将 ...

  4. Maven的pom文件配置

    pom.xml文件如下: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http:// ...

  5. 【开发者笔记】c# 调用java代码

    一.需求阐述 java实现的一个算法,想翻译成c#,翻译代码之后发现有bug,于是不调试了.直接将jar打包成dll拿来用. 二.原理说明 jar可以通过ikvmc工具打包成dll,然后在项目中引入该 ...

  6. PAT 1100 Mars Numbers[难]

    1100 Mars Numbers (20 分) People on Mars count their numbers with base 13: Zero on Earth is called &q ...

  7. arguments参数对象

    //求任意个数的和 function test() { var sum = 0; for (var i = 0; i < arguments.length; i++) { sum += argu ...

  8. Linux系统——Ansible批量管理工具

    批量管理工具: (1)ansible 操作简单(适用于500台以下服务器) (2)saltstack 比较复杂(一般适用于1000-4w台服务器) (3)puppet超级复杂 systemctl(统一 ...

  9. 排序问题Java

    package zhuzhuangtu; import java.util.*; import java.io.*; public class Main{ public static void mai ...

  10. [翻译] Rails::Railtie

    原文:http://api.rubyonrails.org/classes/Rails/Railtie.html Railtie 是 Rails  框架的核心,提供几个钩子来扩展或修改 Rails 的 ...