使用socket编程可以分成基于tcp和基于udp,tcp和udp两者最主要的区别是有无面向连接。

基于tcp的socket流程:

基于udp的socket的流程图:

(以上两图来源于网络)

可以看到基于udp的socket要简单得多,udp的客户端不需要事先connect,而udp的服务器端也不需要listen和accept。

下面贴上一些tcp client, tcp server, udp client, udp server的简单实现代码

tcp client:

__author__ = 'seven'
import socket target_host = "127.0.0.1"
target_port = 80 client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect((target_host, target_port))
client.send("ABCDEF")
response = client.recv(4096) print response
client.close()

tcp server:

__author__ = 'seven'
import socket
import threading bind_ip = "0.0.0.0"
bind_port = 80 server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind((bind_ip, bind_port))
server.listen(5)
print "[*] Listening on %s:%d" % (bind_ip, bind_port) def handle_client(client_socket):
request = client_socket.recv(1024)
print "[*] Received: %s" % request
client_socket.send("ACK!")
client_socket.close() while True:
client, addr = server.accept()
print "[*] Accepted connection from: %s:%d" % (addr[0], addr[1])
client_handler = threading.Thread(target=handle_client, args=(client,))
client_handler.start() server.close()

udp client:

__author__ = 'seven'
import socket target_host = "127.0.0.1"
target_port = 80 client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
client.sendto("ABCDEF", (target_host, target_port))
data, addr = client.recvfrom(4096) print data
client.close()

udp server:

__author__ = 'seven'
import socket bind_ip = "0.0.0.0"
bind_port = 80 server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server.bind((bind_ip, bind_port)) while True:
data, addr = server.recvfrom(4096)
if not data:
print "client has exist"
break
server.sendto("ACK!", addr)
print "received:%s from %s" % (data, addr) server.close()

稍微解释一下一些参数:

AF_INET参数说明使用标准的IPv4地址或主机名

AF_INET6参数说明使用IPv6地址或主机名

SOCK_STREAM参数说明是一个TCP客户端

SOCK_DGRAM参数说明是一个UDP客户端

使用python的socket模块进行网络编程的更多相关文章

  1. Python(九)之网络编程

    一般的网络通信: Python中利用socket模块实现网络主机间通讯: socket.socket(family,type) family:套接字类型 AF_INET AF_UNIX type: S ...

  2. python基础教程总结13——网络编程,

    1.网络设计模块 1.1 socket模块    根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认. 1)服务器监听:是服务器端套接 ...

  3. 老李分享:使用 Python 的 Socket 模块开发 UDP 扫描工具

    老李分享:使用 Python 的 Socket 模块开发 UDP 扫描工具 poptest是业内唯一的测试开发工程师培训机构,测试开发工程师主要是为测试服务开发测试工具,在工作中要求你做网络级别的安全 ...

  4. python中socket模块详解

    socket模块简介 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket.socket通常被叫做"套接字",用于描述IP地址和端口,是一个通信 ...

  5. 如何使用socket进行java网络编程(二)

    通过在如何使用socket进行java网络编程(一)中程序的编写,可以总结出一些常用的java socket编程的范例来. ServerSocket server = new ServerSocket ...

  6. Python基于socket模块实现UDP通信功能示例

    Python基于socket模块实现UDP通信功能示例 本文实例讲述了Python基于socket模块实现UDP通信功能.分享给大家供大家参考,具体如下: 一 代码 1.接收端     import ...

  7. Python中使用模块和库编程

    """ python中使用模块和库编程 导入模块 import modulename [as alias] from modulename import fun1,fun ...

  8. 从零开始学Python第八周:网络编程基础(socket)

    Socket网络编程 一,Socket编程 (1)Socket方法介绍 Socket是网络编程的一个抽象概念.通常我们用一个Socket表示"打开了一个网络链接",而打开一个Soc ...

  9. Python学习(十三) —— 网络编程

    一.操作系统基础 操作系统(Operating System):OS是管理和控制计算机硬件和软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行 ...

随机推荐

  1. thinkphp5.x系列 RCE总结

    Thinkphp  MVC开发模式 执行流程: 首先发起请求->开始路由检测->获取pathinfo信息->路由匹配->开始路由解析->获得模块.控制器.操作方法调度信息 ...

  2. python 读hdf4文件,再转写成一个tif文件

    1.安装pyhdf包 (1)通过此链接查找并下载pyhdf包:https://www.lfd.uci.edu/~gohlke/pythonlibs/#pygame(根据自己的系统及python版本选择 ...

  3. Mysql常用sql语句(八)- where 条件查询

    测试必备的Mysql常用sql语句,每天敲一篇,每次敲三遍,每月一循环,全都可记住!! https://www.cnblogs.com/poloyy/category/1683347.html 前言 ...

  4. C语言进阶_goto与void解析

    世间真正温煦的春色,都熨帖者大地,潜伏在深谷. 一.简介 goto与void是两个不常用的关键字,C语言中的Goto关键字传承字汇编语言,使用方法也与汇编语言相同.void是类型关键字,可修饰函数和变 ...

  5. Spring Cloud Alibaba系列(三)使用feign进行服务调用

    什么是Feign Feign是spring cloud提供的一个声明式的伪http客户端,它使得调用远程服务就像调用本地服务一样简单,只需要创建一个接口并添加一天注解即可. Nacos很好的兼容了Fe ...

  6. 对文本的内容进行排序(io流、集合操作)

    package com.itheima.demo01.BufferedStream; import java.io.*; import java.util.HashMap; /* 练习: 对文本的内容 ...

  7. Android ListView 代码1

    目录 ListView效果 一.ListView的简单用法 二.定制ListView的界面 目标 步骤 1.定义一个实体类作为ListView适配器的适配对象. 2.为ListView的子项指定我们的 ...

  8. [hdu4631 Sad Love Story]最近点对,枚举

    题意:S是平面内点的集合,初始为空,每次向集合里面加入一个点P(x,y),询问S内最近点对的距离的平方和 思路:设当前集合的答案为D,则找到集合里面横坐标在(x-√D,x+√D)内的数,用它们来更新答 ...

  9. 透过面试题掌握HashMap【持续更新中】

    本文主要是自己阅读了HashMap和ConcurrentHashMap源码及一些Java容器类相关的博客后,找了一些很多面经中涉及到的Java容器相关的面试题,自己全部手写的解答,也花了一些流程图,之 ...

  10. 智能制造:数字化协同技术在BIW焊装产线的应用

    随着汽车工业的发展,如何利用数字化技术提高整车制造水平,已经成为各厂商亟待解决的问题.通过数字化工厂系统的应用使得白车身整车项目前期工艺设计.生产线规划质量有了显著提升,数字化工厂已经成为现代焊装生产 ...