一、什么是socket:

  Socket 别名 “网络套接字”,指网络通信链句柄 其实就是一堆网络信息(ip+端口) 建立起的链接称之为socket,Socket的英文原义是“孔”或“插座”,用来实现不同主机之间的通信。网络服务器中可能会提供多种网络服务每种服务都会创建一个socket进行和客户端通信并且对应绑定到一个端口,比如ftp、http分别对应20/21,80端口

二、Socket 类方法:

socket.socket(socket.AF_INET,socket.SOCK_STREAM,0)
    参数一:地址簇
        socket.AF_INET //基于网络的TCP-IPv4地址簇
        socket.AF_INET6 //基于网络的TCP-IPv6地址簇
        socket.AF_UNIX //只能够用于单一的Unix系统进程间通信,也叫AF_LOCAL,基于本地文件的
    参数二:套接字类型
        socket.SOCK_STREAM //流套接字socket  TCP协议
        socket.SOCK_DGRAM //数据包式socket  UDP协议
        socket.RAW  //原始套接字socket  用于处理普通套接字类型无法处理的协议 比如:icmp
    参数三:
        0(默认)与特定的地址家族相关的协议,如果是 0 ,则系统就会根据地址格式和套接类别,自动选择一个合适的协议

三、Socket 对象的方法

#创建一个socket对象server_socket
    server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

server_socket.bind((host,port))
        将端口绑定到ip创建一个socket套接字
    server_socket.listen(5)
        开启socket监听,上面的5代表最多可以建立5个连接(非并发值)
    server_socket.connect((host,port))
        连接到远程socket套接字,如果连接不到则返回socket.error错误
    server_socket.settimeout(5)
        设置socket等待超时时间这里单位为秒 这里的5就代表5s
    server_socket.send()
        客户端将string中的数据发送到连接的套接字。返回值是要发送的字节数量,该数量可能小于string的字节大小。
    server_socket.sendall()
        客户端将string中的数据发送到连接的套接字,但在返回之前会尝试发送所有数据。成功返回None,失败则抛出异常
    conn.addr=server_socket.accpet()
        接收连接并返回(conn,addr),conn为新的套接字对象用于数据交互,addr就是远程socket对象的ip和端口以元组的方式返回
    conn.send('string')
        服务端将string中的数据发送到连接的套接字。返回值是要发送的字节数量,该数量可能小于string的字节大小。
    conn.sendall('string')
        服务端将string中的数据发送到连接的套接字,但在返回之前会尝试发送所有数据。成功返回None,失败则抛出异常。
    conn.recv(1024)
        服务端接收socket数据,1204为最大接收的socket数据字节大小为字符串
    conn.recvfrom()
        作用和recv类似 返回值为(data,address),dada为字符串数据 address为远程socket地址
    conn.close()
        关闭socket连接
    server_socket.setblocking(bool)
        是否开启阻塞模式,默认为True开启状态 False 为关闭状态,如果关闭阻塞模式如果accept、recv接收不到socket连接、socket数据则报错
    server_socket.close()
        关闭socket服务
    server_socket.sendto(string,(host,port))
        发送string数据用于UDP数据发送 host 为远程地址 port为远程端口
    server_socket.getpeername()
        获取远程socket地址 返回值为元组(host,port)
    server_socket.getsockname()
        获取本机socket地址 返回值为元组(host,port)
    注:
        accept,recv默认为阻塞(setblocking的值为True)状态,即等待连接(accept)、等待接收数据(recv)

四、socket的连接建立以及数据交互原理、步骤

如下图所示:

四、举例:

  利用socket实现c(client)/s(server)模式可以进行简单的信息交互,先执行服务端然后执行客户端 可以看到server端和client端有数据交互

server端代码

 #-*- coding:utf-8 -*-
#/usr/bin/env python
import socket
server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
hosts = ('localhost',8081)
server_socket.bind(hosts)
server_socket.listen(5) while True:
print 'wariting......'
count,address = server_socket.accept()
client_data = count.recv(1024)
print client_data
count.sendall('server message')
count.close()
server_socket.close()

Server

client端代码

 #-*- coding:utf-8 -*-
#/usr/bin/env python
import socket
client_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
hosts = ('127.0.0.1',8081)
client_socket.connect(hosts)
client_socket.settimeout(5) print 'client'
client_socket.sendall('client message')
server_data = client_socket.recv(1024)
print server_data
client_socket.close()

Client

Pyhont 网络编程【第一篇】初始Socket网络套接字的更多相关文章

  1. 【Java】Java网络编程菜鸟进阶:TCP和套接字入门

    Java网络编程菜鸟进阶:TCP和套接字入门 JDK 提供了对 TCP(Transmission Control Protocol,传输控制协议)和 UDP(User Datagram Protoco ...

  2. 网络编程[第一篇]基于tcp协议的套接字编程

    将服务端-客户端的连接比作双方打电话的过程 2019-07-24 一.客户端 主动的一方: 客户端实例化一个socket对象--> 主动像服务端发送连接请求--> (服务端接受请求后即可进 ...

  3. 网络编程之基于UDP协议的套接字编程、基于socketserver实现并发的socket

    目录 基于UDP协议的套接字编程 UDP套接字简单示例 服务端 客户端 基于socketserver实现并发的socket 基于TCP协议 server类 request类 继承关系 服务端 客户端1 ...

  4. 【UNIX网络编程(四)】TCP套接字编程具体分析

    引言: 套接字编程事实上跟进程间通信有一定的相似性,可能也正由于此.stevens这位大神才会将套接字编程与进程间的通信都归为"网络编程",并分别写成了两本书<UNP1> ...

  5. unix网络编程第四章----基于TCP套接字编程

    为了执行网络I/O操作.进程必须做的第一件事情就是调用Socket函数.指定期待的通信协议 #include<sys/socket.h> int socket(int family,int ...

  6. python 之 网络编程(基于TCP协议的套接字通信操作)

    第八章网络编程 8.1 基于TCP协议的套接字通信 服务端套接字函数 s.bind() 绑定(主机,端口号)到套接字 s.listen() 开始TCP监听 s.accept() 被动接受TCP客户的连 ...

  7. 《Unix 网络编程》08:基本UDP套接字编程

    基本UDP套接字编程 系列文章导航:<Unix 网络编程>笔记 UDP 概述 流程图 recvfrom 和 sendto #include <sys/socket.h> ssi ...

  8. python 之 网络编程(基于UDP协议的套接字通信)

    8.5 基于UDP协议的套接字通信 UDP协议:数据报协议 特点:无连接,一发对应一收,先启动哪一端都不会报错 优点:发送效率高,但有效传输的数据量最多为500bytes 缺点:不可靠:发送数据,无需 ...

  9. Linux 网络编程详解一(IP套接字结构体、网络字节序,地址转换函数)

    IPv4套接字地址结构 struct sockaddr_in { uint8_t sinlen;(4个字节) sa_family_t sin_family;(4个字节) in_port_t sin_p ...

  10. Python网络编程——设定并获取默认的套接字超时时间

    Sometimes,you need to manipulate the default values of certain properties of a socket library, for e ...

随机推荐

  1. Java内存结构、类的初始化、及对象构造过程

    概述 网上关于该题目的文章已经很多,我觉得把它们几个关联起来讲可能更好理解一下.与其它语言一样,它在执行我们写的程序前要先分配内存空间,以便于存放代码.数据:程序的执行过程其实依然是代码的执行及数据的 ...

  2. C程序内存分配

    在多任务操作系统中的每一个进程都运行在一个属于它自己的内存沙盘中.这个沙盘就是虚拟地址空间(virtual address space),在32位模式下它总是一个4GB的内存地址块.这些虚拟地址通过页 ...

  3. NOIP2012 Vigenère 密码

    1.Vigenère 密码 (vigenere.cpp/c/pas) [问题描述] 16 世纪法国外交家 Blaise de Vigenère 设计了一种多表密码加密算法——Vigenère 密码.V ...

  4. ios开发中,A valid provisioning profile for this executable was not found,的解决方法

    手头上的一个ios项目在上架后,再进行时出现了以上的这个错误,这是上架后忘了对一些配置进行复原 我的项目解决方法是: 是上面的这一块出现了问题,图片上的配置是正常的情况,但是上架的时候对其进行了修改, ...

  5. 清空具有外键约束的表时报ERROR 1701(42000)的解决办法

    ERROR 1701 (42000): Cannot truncate a table referenced in a foreign key constraint (`furion`.`tbl_fr ...

  6. 50道经典的JAVA编程题(21-25)

    50道经典的JAVA编程题(21-25),明天早上java考试了,还是坚持做题吧...这题比老师的题好多了! [程序21]TestJieCheng.java题目:求1+2!+3!+...+20!的和1 ...

  7. android 的开源输入法介绍,及 自动触摸的实现方法

    输入法的开源代码见我自己的360云盘里的 openwnn-legacy-android-open-ime.tar.bz2 文件 http://www.pocketmagic.net/injecting ...

  8. iOS: ARC和非ARC下使用Block属性的问题

    1. Block的声明和线程安全 Block属性的声明,首先需要用copy修饰符,因为只有copy后的Block才会在堆中,栈中的Block的生命周期是和栈绑定的,可以参考之前的文章(iOS: 非AR ...

  9. Resharp非常实用的快捷键

    Alt+Home  定位到父类.父接口 Alt + End 定位到子类 Ctrl+T     快速在整个解决方案下搜索 类型.方法.文件夹 Alt+Ctrl+Spance  给出提示框 Shift+F ...

  10. 读取.tmx地图

    读取.tmx地图 m_GameMap = CCTMXTiledMap::create("map1.tmx"); this->addChild(m_GameMap,1); 读取 ...