socket(一)

socket流程

基础版功能

server 端

import socket

server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)#ipv4,tcp
# Socket Families(地址簇)
# socket.AF_UNIX unix本机进程间通信
# socket.AF_INET IPV4 
# socket.AF_INET6  IPV6

# Socket Types
# socket.SOCK_STREAM  #for tcp
# socket.SOCK_DGRAM   #for udp
# socket.SOCK_RAW     #原始套接字,普通的套接字无法处理ICMP、IGMP等网络报文,而SOCK_RAW可以;
# 其次,SOCK_RAW也可以处理特殊的IPv4报文;此外,利用原始套接字,可以通过IP_HDRINCL套接字选项由用户构造IP头。
# socket.SOCK_RDM  #是一种可靠的UDP形式,即保证交付数据报但不保证顺序。SOCK_RAM用来提供对原始协议的低级访问,
# 在需要执行某些特殊操作时使用,如发送ICMP报文。SOCK_RAM通常仅限于高级用户或管理员运行的程序使用。

server.bind(("0.0.0.0",8000))       #绑定ip,端口
server.listen(5)        #监听5个
print("-----------------start to listen.....")
conn,client_addr = server.accept()  #等待 conn 链接的标记位; client_addr的链接地址
#conn就是客户端链接过来而在服务器端为其生成的一个连接实例
# print(conn,client_addr)
while True:
    data = conn.recv(1024)
    print("recv from cli:",data.decode())
    conn.send("got your mes".encode())
server.close()

client端

import socket

client = socket.socket()    #声明socket类型,同时生成socket链接对象
client.connect(("localhost",8000))

while True:
    msg = input(">>:").strip()
    if len(msg) == 0:continue       #如果不写会卡住
    client.send(msg.encode("utf-8"))       #转成utf-8
    print("send",msg)
    # data = client.recv(1024)        #1024byte
    # print("receive from server:",data.decode())

client.close()

无限录入版

server

import socket,subprocess

server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)#ipv4,tcp
server.bind(("0.0.0.0",8000))       #绑定ip,端口
server.listen(5)        #监听5个
print("-----------------start to listen.....")
while True:
    conn,client_addr = server.accept()  #等待 conn 链接的标记位; client_addr的链接地址
    #conn就是客户端链接过来而在服务器端为其生成的一个连接实例
    # print(conn,client_addr)
    while True:
        data = conn.recv(1024)      #接过来的命令
        res_obj = subprocess.Popen(data,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
        res = res_obj.stdout.read()
        conn.send(str(len(res)).encode())
        conn.send(res)
server.close()

client

import socket

client = socket.socket()    #声明socket类型,同时生成socket链接对象
client.connect(("localhost",8000))

while True:
    msg = input(">>:").strip()
    if len(msg) == 0:continue       #如果不写会卡住
    client.send(msg.encode())       #转成utf-8
    print("send",msg)
    data = client.recv(1024)        #1024byte
    print("receive from server:",data.decode())
    total_size = int(data.decode())

    received_size = 0
    res = b‘‘
    while received_size < total_size:
        d = client.recv(1024)
        res += d
        received_size += len(d)
    print("--------rece done--------")
    print(res.decode())

client.close()
时间: 2024-09-28 22:52:56

socket(一)的相关文章

使用 IDEA 创建 Maven Web 项目 (异常)- Disconnected from the target VM, address: &#39;127.0.0.1:59770&#39;, transport: &#39;socket&#39;

运行环境: JDK 版本:1.8 Maven 版本:apache-maven-3.3.3 IDEA 版本:14 maven-jetty-plugin 配置: <plugin> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <configuration> <webAppSourceDirectory>${pro

iOS开发——网络编程OC篇&amp;Socket编程

Socket编程 一.网络各个协议:TCP/IP.SOCKET.HTTP等 网络七层由下往上分别为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 其中物理层.数据链路层和网络层通常被称作媒体层,是网络工程师所研究的对象: 传输层.会话层.表示层和应用层则被称作主机层,是用户所面向和关心的内容. http协议   对应于应用层 tcp协议    对应于传输层 ip协议     对应于网络层 三者本质上没有可比性.  何况HTTP协议是基于TCP连接的. TCP/IP是传输层协议,主要

winform学习日志(二十三)---------------socket(TCP)发送文件

一:由于在上一个随笔的基础之上拓展的所以直接上代码,客户端: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Net.Sockets; using Sys

程序媛计划——python socket通信

定义 socket 是进程间的一种通信方式,可以实现不同主机间的数据传输 #写服务期端程序server.py #实现服务器向客户端连接 1 #!/usr/bin/env python 2 #coding:utf-8 3 import socket 4 s= socket.socket() 5 #127.0.0.1是本地主机,1234是随意设置到一个端口号 6 s.bind(('127.0.0.1',1234)) #绑定端口号为1234 7 8 #等待客户端连接 9 s.listen(5) 10

Linux Socket编程-(转自吴秦(Tyler))

"一切皆Socket!" 话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的socket. --有感于实际编程和开源项目研究. 我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠socket?那什么是socket?socket的类型有哪些?还有socket的基本函数,这些都是本文想介绍的.本文的主要内容如下: 1.网络中进程之间如何通信?

java socket编程中backlog的含义(zz)

使用Java.NET.ServerSocket能够方便的创建一个服务端套接字,这个类的构造函数有一个参数backlog.下面这段代码,在本机的8888端口上建立了一个套接字,backlog设置为5. [java] view plain copy // port:8888,backlog:5 ServerSocket server = new ServerSocket(8888, 5); 下面的Client是我们的测试类,会创建30个socket连接. [java] view plain copy

Python Socket 编程——聊天室演示样例程序

上一篇 我们学习了简单的 Python TCP Socket 编程,通过分别写服务端和client的代码了解主要的 Python Socket 编程模型.本文再通过一个样例来加强一下对 Socket 编程的理解. 聊天室程序需求 我们要实现的是简单的聊天室的样例,就是同意多个人同一时候一起聊天.每一个人发送的消息全部人都能接收到,类似于 QQ 群的功能,而不是点对点的 QQ 好友之间的聊天.例如以下图: 图来自:http://www.ibm.com/developerworks/linux/tu

【windows socket+UDPserverclient】

Windows Socket+UDPserverclient Winsock是 Windows下套接字标准.                    1.UDP socket编程:          UDP(用户数据报协议)是一个无连接.不可靠的传输数据,其特点是简单,快捷.相比与TCP,UDP不须要建立连接(不需connect.accept函数),数据发送接收之后,不须要终止连接.基于UDP的程序,避免了TCP执行的开销,在效率与速度上具有更好的表现.          UDP是无连接的,可能会

Unity3d 封装Socket创建简单网络

北京又在打雷下大雨了,学习Unity以来,越来越感兴趣,情不自禁的想要学习更多知识 这次自己搭建一个Socket模块,比较基础,适合新手学习,详细介绍Socket的搭建过程,同样会把详细过程在代码里进行注释~ 在搭建Socket过程中,需要创建以下几个常用的方法: 1.创建套接字(socket) 2.绑定Ip和端口 3.监听方法 4.接收客户端请求的方法 5.收发消息的方法 创建SocketManger管理类 把客户端与服务端代码都写在新建的SocketManger里,并把SocketMange

Java网络编程之tcp的socket通信

1.客户端MyClient.java 1 import java.io.*; 2 import java.net.*; 3 4 public class MyClient 5 { 6 public static void main(String[] args)throws Exception 7 { 8 Socket s = new Socket("192.168.1.1" , 30000); 9 // 客户端启动ClientThread线程不断读取来自服务器的数据 10 new Th