TCP死锁演示

TCP死锁:

两个程序共享有限的资源,由于糟糕的计划,A程序只能等待B程序资源占用结束后才能使用资源,这种情况就是死锁(deadlock)

代码的解释明天给出

#!/usr/bin/env python3
#-*- encoding:utf8 -*-

import argparse,sys,socket

def server(host,port,bytecount):
    sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
    sock.bind((host,port))
    sock.listen(5)
    print("listening at",sock.getsockname())

    while True:
        sc,addr = sock.accept()
        print("Processing up to 1024 Bytes at a time from",addr)

        n = 0
        while True:
            data = sc.recv(1024)
            if not data:break
            output = data.decode().upper().encode()
            sc.sendall(output)
            n += len(data)
            print("\r %d Bytes process so far" %(n,),end=‘‘)
            sys.stdout.flush()
        sc.close()
        print("socket closed")

def client(host,port,bytecount):
    sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    bytecount = (bytecount+15) // 16 * 16
    message = ("capitalize this!").encode()

    print("sending",bytecount,"bytes of data , in chunks of 16 bytes")
    sock.connect((host,port))

    sent = 0
    while sent < bytecount:
        sock.sendall(message)
        sent+= len(message)
        print("\r %d Bytes sent" %(sent,),end=‘‘)
        sys.stdout.flush()
    print()
    sock.shutdown(socket.SHUT_WR)

    print(‘receiving all the data the server sends back‘)

    received = 0

    while True:
        data = sock.recv(42)
        if not received:print(‘The first data received says‘,repr(data))
        if not data:break
        received += len(data)
        print(‘\r %d Bytes received‘ %(received,),end=‘‘)
    print()
    sock.close()

if __name__ == "__main__":
    choices = {
        "client":client,
        "server":server
    }
    parser = argparse.ArgumentParser(description=‘Get deadlocked over TCP‘)
    parser.add_argument(‘role‘,choices=choices,help=‘which role to play‘)
    parser.add_argument(‘host‘,help=‘interface the server listen it;‘‘host the client to send‘)
    parser.add_argument(‘bytecount‘, type = int , nargs = "?" , default=16 , help=‘number of bytes for cleint to send (default 16)‘)
    parser.add_argument(‘-p‘, metavar=‘PORT‘ ,type=int , default=1060 , help=‘TCP PORT(default 1060)‘)

    args = parser.parse_args()
    function=choices[args.role]
    function(args.host, args.p , args.bytecount)
时间: 2024-10-12 21:21:32

TCP死锁演示的相关文章

Java死锁演示

Java死锁演示 在线程中嵌套获取锁导致死锁.思路,尽量不要嵌套获取锁. package com.mozq.demo.demo; public class DeadLockDemo { private static String A = "A"; private static String B = "B"; public static void main(String[] args) { new DeadLockDemo().deadLock(); } privat

W5500EVB TCP Server演示

之前给大家展示了W5500EVB TCP Client是怎样实现的,本文介绍一下W5500EVB TCP Server演示过程. 一.程序编译 使用IAR打开W5500EVB例程中TCP Server的app.eww文件,在main函数中改动ip和gw与PC在同一网段.然后进行Compile.Make,使Debug\Exe目录更新app.bin并记录模组的IP及打开的Port. 二.程序下载 1.打开设备管理器.查询Mini USBport号. 2.打开Flash loader Demonstr

java 网络编程(三)---TCP的基础级示例

下面是TCP java网络编程的基础示例: tcp传输:客户端建立过程的思路:1.创建TCP客户端的Socket服务,使用的是socket对象,建议在创建的过程中,就明确了目的地和要连接的主机2.如果连接建立成功,说明数据传输通道已经建立,该通道就是Socket的I/O流,是底层建立好的,既然是流,就说明有输入流,就有输出流,要换取就找socket获取相关的流即可,   getInputStream()和getOutputStream()的字节流.3.使用输出流,将数据输出:使用输入流,把数据输

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

Socket网络编程 一,Socket编程 (1)Socket方法介绍 Socket是网络编程的一个抽象概念.通常我们用一个Socket表示"打开了一个网络链接",而打开一个Socket需要知道目标计算机的IP地址和端口号,再指定协议类型即可. 套接字是一个双向的通信信道的端点.套接字可能在沟通过程,进程之间在同一台机器上,或在不同的计算机之间的进程 要创建一个套接字,必须使用Socket模块的socket.socket()方法 在socket模块中的一般语法: s = socket.

Traceroute原理介绍

一.路由追踪 路由跟踪,就是获取从主机A到达目标主机B这个过程中所有需要经过的路由设备的转发接口IP. 二.ICMP协议 Internet控制报文协议(internet control message protocol),它是TCP/IP协议族的一个子协议,用于在IP主机.路由器之间传递控制消息.控制消息是指网络通不通.主机是否可达.路由是否可用等网络本身的消息.这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用. 日常生活中,邮寄包裹会经过多个传递环节,任意一环如果无法传下

Linux Socket编程注意事项

Socket API 是网络应用程序开发中实际应用的标准 API.虽然该 API 简单.可是开发新手可能会经历一些常见的问题.本文识别一些最常见的隐患并向您显示怎样避免它们. 隐患 1.忽略返回状态 第一个隐患非常明显,但它是开发新手最easy犯的一个错误. 假设您忽略函数的返回状态,当它们失败或部分成功的时候,您或许会迷失. 反过来.这可能传播错误.使定位问题的源头变得困难. 捕获并检查每个返回状态.而不是忽略它们.考虑清单 1 显示的样例,一个套接字 send 函数. 清单 1. 忽略 AP

Java学习笔记(Javase毕向东版视频)十

网络编程: 一.osi和TCP协议对照: 二.通讯三要素: 三.InetAddress对象简述: 1 import java.net.InetAddress; 2 import java.net.UnknownHostException; 3 4 public class IpClassDemo 5 { 6 public static void main(String[] args) throws UnknownHostException{ 7 demo(); 8 } 9 10 public s

Linux 套接字编程中的 5 个隐患

在异构环境中开发可靠的网络应用程序 M. Tim Jones ([email protected]), 资深软件工程师, Emulex 简介: Socket API 是网络应用程序开发中实际应用的标准 API.尽管该 API 简单,但是开发新手可能会经历一些常见的问题.本文识别一些最常见的隐患并向您显示如何避免它们. 发布日期: 2005 年 10 月 08 日 级别: 中级 访问情况 : 13059 次浏览 评论: 0 (查看 | 添加评论 - 登录)  平均分 (34个评分)为本文评分 在

SOCKET编程第二讲

socket网络编程 1.1. 使用TCP协议的流程图 TCP通信的基本步骤如下: 服务端:socket---bind---listen---while(1){---accept---recv---send---close---}---close 客户端:socket----------------------------------connect---send---recv-----------------close 服务器端: 1. 头文件包含: #include<sys/types.h>