第一章 1.19 网络编程基础

一. socket编程

  • socket又叫套接字
  • socket编程其实就是用代码来实现进行网络通信的两个端;套接字就是实现通信的两个程序
  • 实现通信的两个端分为 服务器客户端 两种
  • python通过 socket模块 来提供socket编程相关的类和方法

二. 服务器端

(注:以下操作中服务器端和客户端分两个py文件实现)

1. 创建套接字对象(买电话机)

socket(family=AF_INET, type=SOCK_STREAM)

family - 设置ip类型; AF_INET对应的是ipv4; AF_INET6对应的是ipv6
type - 设置传输类型;  SOCK_STREAM对应的是TCP协议; SOCK_DGRAM对应的是UDP协议

2. 绑定IP和端口(插电话线)

bind((ip地址, 端口))

ip地址: 找到互联网中唯一的一台计算机; 赋值ip地址对应的字符串
端口: 区分同一台计算机中不同的服务(程序); 赋整数,值的范围是0~65535, 其中0~1024属于著名,不能随便用。
     同一时间同一个端口只能对应一个服务

3. 开始监听(等电话)

server.listen(N)

N : 表示能同时接通的"电话"的数量

4. 接受客户端请求(接电话)

connection, address = server.accept()

connection : 服务器接收的客户端的分机对象
address : 该客户端的IP地址
返回为这个客户端创建的独立的套接字对象(分机)和客户端的地址
当程序运行到这句代码的时候会停下来,直到有请求为止

5. 接收消息(听对方说话)

分机对象 . recv(一次性能够接收的数据的大小)

返回接收到的数据, 数据类型是二进制

6. 发送消息(说话给别人听)

分机对象.send(需要发送的数据)

7. 关闭连接(挂电话)

分机对象.close()

一个完整的服务器端

from socket import socket

server = socket()
server.bind(('192.168.10.234', 5200)) # ip地址可以用自己电脑的IP, 端口随便,只要不是0-1024
server.listen(50) # 表示这个服务器可以同时和50个客户端进行通信
while True: # 保证通话一直进行
    print('正在监听...')
    connection, address = server.accept() # 接受客户端请求,并创建分机对象connection, 返回分机地址address
    recv_data = connection.recv(1024).decode(encoding='utf-8') # 接收客户端发来的数据,并将二进制转换成字符串(.decode方法)
    print('recv_data') # 打印接收到的数据
    massage = input('请输入发送内容:') # 输入要发送的内容
    connection.send(massage) # 发送数据
    connection.close() # 关闭对话

三. 客户端

1. 创建套接字对象(买电话)

client = socket()

2. 连接服务器

client.connect((‘192.168.10.234‘, 5200))

3. 发送消息

client.send()

4. 接收消息

client.recv()

5. 断开连接

client.close()

一个完整的客户端

client = socket()
client.connect(('192.168.10.234', 5200))
client.send('服务器你好吗?'.encode())
re_data = client.recv(1024)
print(re_data.decode(encoding='utf-8'))
client.close()

四. 其他骚操作

1. 一对一持续通信

"""服务器端"""
from socket import socket

server = socket()
server.bind(('10.7.156.55', 9999))
server.listen(20)
while True:
    print('正在监听...')
    connection, address = server.accept()
    # 持续通信
    while True:
        re_data = connection.recv(1024)
        re_massage = re_data.decode(encoding='utf-8')
        print('client:', re_massage)
        if re_massage == '再见':
            connection.close()
            break

        massage = input('server:')
        connection.send(massage.encode())
        if massage == '再见':
            connection.close()
            break

"""客户端"""
from socket import socket

client = socket()
client.connect(('10.7.156.55', 9999))
while True:
    massage = input('client:')
    # for _ in range(10):
    client.send(massage.encode())
    if massage == '拜拜':
        client.close()
        break

    re_massage = client.recv(1024).decode(encoding='utf-8')
    print('server:', re_massage)
    if re_massage == '拜拜':
        client.close()
        break

2. 发送图片

"""服务器端"""
from socket import socket

server = socket()
server.bind(('10.7.156.55', 8000))
server.listen(1024)
while True:
    connection, address = server.accept()
    with open('../code/1024x1024.jpg', 'rb') as f:
        data = f.read()
    connection.send(data)

"""客户端"""
from socket import socket

client = socket()
client.connect(('10.7.156.55', 8000))
# 接收图片长度
total_length = int(client.recv(1024).decode())
print('第一次:', total_length)
sum_data = bytes()   # 保存接收到的图片的总数据
# 接收图片
while True:
    re_data = client.recv(1024)
    sum_data += re_data
    if len(sum_data) == total_length:
        with open('client/test1.wav', 'wb') as f:
            f.write(sum_data)
        break


完结撒花

原文地址:https://www.cnblogs.com/anjhon/p/11960722.html

时间: 2024-08-01 22:53:41

第一章 1.19 网络编程基础的相关文章

第十一章:Python の 网络编程基础(三)

本課主題 多线程的创建和使用 消息队列的介绍 Python 操作 memached 和 redis 实战 本周作业 消息队列的介绍 对列是在内存中创建的,如果程序运行完毕之后被清空了,消息就清空了. 先进先出队列 class Queue: '''Create a queue object with a given maximum size. If maxsize is <= 0, the queue size is infinite. ''' def __init__(self, maxsize

Linux 网络编程基础(4) -- Ping 的C代码实现

1.背景 在进行网络编程的时候,通常使用的协议有TCP协议,UDP协议.这些协议在简历套接字之初需要制定套接字的类型,比如TCP应当设置为 SOCK_STREAM, UDP对应的套接字应当设置为SOCK_DGRAM.但是这些套接字并非能够提供网络所需的全部功能,我们还需要其他的套接字,比如原始套接字OCK_RAW.原始 套接字可以提供SOCK_STREAM和SOCK_DGRAM所不及的能力.比如: (1)有了原始套接字,进程可以读取ICMPV4.ICMPV6.IGMP等的分组.正如ping所使用

第九章、shell脚本编程基础

第九章.shell脚本编程基础 本章内容 编程基础 脚本基本格式 变量 运算 条件测试 配置用户环境 编程基础 程序:指令+数据 程序编程风格: 过程式:以指令为中心,数据服务于指令 对象式:以数据为中心,指令服务于数据 shell程序:提供了编程能力,解释执行 程序的执行方式 计算机:运行二进制指令 编程语言: 低级:汇编 高级: 编译:高级语言-->编译器-->目标代码 java,C# 解释:高级语言-->解释器-->机器代码 shell, perl, python (系统后台

《Linux高性能服务器编程》学习总结(五)——Linux网络编程基础API

第五章      Linux网络编程基础API 对于网络编程,首先要了解的就是字节序的问题,字节序分为主机字节序和网络字节序,主机字节序又称小端字节序,是低字节存放在地地址,而网络字节序又称大端字节序,是低字节放在高地址.当数据在不同的机器上传播时,就需要统一字节顺序以保证不出现错误.在发送数据前,先将需要转变的数据转成网络字节序再发送,接收时先转成主机字节序再处理,要特别注意的是,即使是本机的两个进程通信,也要考虑字节序的问题,比如JAVA的虚拟机就使用大端字节序.使用如下代码可以查看本机的字

PYTHON网络编程基础 pdf扫描版高清下载

PYTHON网络编程基础 pdf,本书全面介绍了使用PYTHON进行网络编程的基础知识,高级网络操作.WebServices.解析HTML和XHTML.XML.FTP.使用PYTHON操作数据库.SSL.几种服务器端框架,以及多任务处理等,实用性比较强,书中提供了175个实例,6600行以上的代码. 目录 第1部分 底层网络 第1章 客户/服务器网络介绍 第2章 网络客户端 第3章 网络服务器 第4章 域名系统 第5章 域名系统 第2部分 Web Service 第6章 Web客户端访问 第7章

Java网络编程基础(六)— 基于TCP的NIO简单聊天系统

在Java网络编程基础(四)中提到了基于Socket的TCP/IP简单聊天系统实现了一个多客户端之间护法消息的简单聊天系统.其服务端采用了多线程来处理多个客户端的消息发送,并转发给目的用户.但是由于它是基于Socket的,因此是阻塞的. 本节我们将通过SocketChannel和ServerSocketChannel来实现同样的功能. 1.客户端输入消息的格式 username:msg    username表示要发送的的用户名,msg为发送内容,以冒号分割 2.实现思路 实现思路与Java网络

Java笔记二十三.网络编程基础与UDP编程

网络编程基础与UDP编程 转载请表明出处:http://blog.csdn.net/u012637501(嵌入式_小J的天空) 一.网络编程基础 1.TCP/IP协议:TCP/IP协议是一个非常实用的网络应用程序通信协议,包括TCP(传输控制协议)和IP地址(计算机唯一标识号). 2.IP地址:IP在互联网中能唯一标识一台计算机,是每一台计算机的唯一标识(身份证),通过这个标识号来指定接收数据的计算机和识别发送数据的计算机,该标识号即为IP地址. (1)Ipv4:指在计算机中IP地址用4个字节(

Linux程序设计学习笔记----Socket网络编程基础之TCP/IP协议簇

转载请注明出处: ,谢谢! 内容提要 本节主要学习网络通信基础,主要涉及的内容是: TCP/IP协议簇基础:两个模型 IPv4协议基础:IP地址分类与表示,子网掩码等 IP地址转换:点分十进制\二进制 TCP/IP协议簇基础 OSI模型 我们知道计算机网络之中,有各种各样的设备,那么如何实现这些设备的通信呢? 显然是通过标准的通讯协议,但是,整个网络连接的过程相当复杂,包括硬件.软件数据封包与应用程序的互相链接等等,如果想要写一支将联网全部功能都串连在一块的程序,那么当某个小环节出现问题时,整只

Android 网络编程基础之简单聊天程序

前一篇讲了Android的网络编程基础,今天写了一个简单的聊天程序分享一下 首先是服务端代码: 1 package com.jiao.socketdemo; 2 3 import java.io.BufferedReader; 4 import java.io.BufferedWriter; 5 import java.io.IOException; 6 import java.io.InputStreamReader; 7 import java.io.OutputStreamWriter;