python 网络编程 socket

一、基础知识

网络根椐地域面积分为三类:局域网()、城域网(几十公里)、广域网(www)

ip地址由4个8位组成第一个数字不能大于255

IP地址由网络地址+本机地址组成

分为5类:

A类:1.0.0.0~126.255.255.255

前一个是网络地址,后三位是本机地址

(127.0.0.1,localhost是本地回环地址)

B类:128.255.255.255~191.255.255.255

前二两是网络地址,后两个是本机地址

C类:192.255.255.255~223.255.255.255

前三位是网络地址,后一位是本机地址:ee

D类:用于组播

E类:

OSI 七层模型:

1、应用层,表示层、会话层

2、传输层(传输协议):tcp udp

3、网络层

4、数据链路层

5、物理层

查看本机的ip:运行中cmd--------->ipconfig

查看电脑是否可以上网:ping www.baidu.com

端口号:每一种软件用的端口号都是不一样的

什么是网络编程:

网络编程实现计算机与计算机之间的通信

通 过网络编程我们要了解什么问题?通信协议:

tcp:可靠,有状态的,长连接的协议,像打电话一样

udp:不可靠,无连接,像发短信一样。发送的包的顺序要有编号

http:基于tcp协议

ftp:文件传输协议

pop3:邮局协议版本3.是tcp/ip协议族中的一员

smtp:简单邮件传输协议

qq视频发消息

socket套接字进行通信:分为服务器,客户端进行通信,客户端不可以和客户端进行通信,服务器端也要建个socket

实现网络编:

第一步:创建socket对象

第二步:建立连接

第三步:通信

服务器端方法:

s.bind(host,port)绑定地址,  s.listen()监听  accept()接收 

客户端常用方法:

connect()  connect_ex()不抛导常返加错误码------连接服务器

共同方法:

recv 接收tcp数据

send ()发送数据

sendall() 完整发送

close()关闭套接字

服务器接收到客户端服务器建立一个socket

如果想让socket都独立,需要建立线程

下面第一个实例:

(一对一的网络编程)

服务器端代码:

import socket#导入socket模块
s=socket.socket()#创建socket对象
s.bind(('127.0.0.1',8888)) #绑定端口
s.listen(5)  #等待客户端边接
print('服务器已启动..........')
c,addr=s.accept() #建立客户端连接
c.send(("欢迎光临").encode('utf-8'))
c.close() #关闭链接

客户端代码:

#客户端
import socket  #导入socket模块
s=socket.socket() #创建socket对象
s.connect(('localhost',8888)) #连接服务器
print('客户端已启动')
print(s.recv(1024).decode())
s.close()

实例二(线程通信):

服务器端代码:

import socket
import threading
serversocket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
serversocket.bind(("localhost",9999))#绑定服务地址和端口号
print("服务器已等待")
serversocket.listen(5)#最多同时接收5个
print("最多同时连接5个客户")
c=serversocket.accept()#接收客户端的连接,些c 是元组,表示得到的客户端的地址和端口
print("正在待待客户端")
#发送和接收单独线程处理
def myrerv(c):
    while True:
        msg=c[0].recv(1024)
        print(msg.decode())
threading._start_new_thread(myrerv,(c,))
def myinput():
    while True:
        msg=input()
        c[0].send(msg.encode())
threading._start_new_thread(myinput())

客户端代码:

import socket
import threading
client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
client.connect(("localhost",9999))

#发送和接收单独线程处理
def myrerv(c):
    while True:
        msg=c.recv(1024) #接收消息
        print((msg.decode()))
threading._start_new_thread(myrerv,(client,))

def myinput():
    while True:
        msg=input()
        client.send(msg.encode())#发送消息的线程
threading._start_new_thread(myinput())

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值