python網絡編程---TCP服務器

0x01 環境

python2 pycharm

0x02 程序

客戶端程序:

# -*- coding:UTF-8 -*-
import socket
'''
target_host='www.baidu.com'
target_port=80
'''
target_host='localhost'
target_port=3345
data='ABCDEF'# 創建一個socket對象
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 連接客戶端
client.connect((target_host,target_port))
# 發送一些數據
#client.send("GET / HTTP/1.1\r\nHost:baidu.com\r\n\r\n")
client.send(data)
# 接收一些數據
response=client.recv(4096)
print response

服務器端程序:

# -*- coding:utf-8 -*-
import socket
import threadingbind_ip="localhost"
bind_port=3345server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server.bind((bind_ip,bind_port))
server.listen(1)print "[*] Listening on %s:%d" %(bind_ip,bind_port)#這是客戶處理線程
def handle_client(client_socket):#打印客戶端發送得到的東西request = client_socket.recv(1024)print "[*] Received:%s" % request#返回一個數據包client_socket.send("ACK")client_socket.close()while True:client,addr=server.accept()print addrprint "[*] Accepted connection from: %s:%d" %(addr[0],addr[1])#掛起客戶端程序,處理傳入的數據client_handler=threading.Thread(target=handle_client,args=(client,))#target是線程需要去執行的函數名,args是一個元組,是函數的參數client_handler.start()

0x03 解釋

客戶端程序我就不解釋了,我在另一篇解釋的很詳細,不明白可以到這里看
https://blog.csdn.net/qq_41683305/article/details/113809707
服務端程序:

server.bind((bind_ip,bind_port))

bind(address):綁定地址(host,port)到套接字, 在 AF_INET下,以元組(host,port)的形式表示地址。

server.listen(1)

listen(backlog):開始 TCP 監聽。backlog 指定在拒絕連接之前,操作系統可以掛起的最大連接數量

client,addr=server.accept()

accept():接受一個客戶端的連接請求,不同于以上socket()返回的用于監聽和接受客戶端的連接請求的套接字,與客戶端通信是通過這個新的套接字上發送和接收數據來完成的,每個連接進來的客戶端,都會通過accept函數返回一個不同的客戶端socket對象和屬于客戶端的套接字,client就是新的套接字,addr是一個元組,存放的第一個元素是客戶端IP,第二個是端口

 client_handler=threading.Thread(target=handle_client,args=(client,))

Thread是一個類,創建一個新的線程對象,target指定調用的函數,args指定調用函數的參數,是一個元組,后面要加一個’,’ ,當調用start函數時,就回去執行這個函數

0x04 遠行結果

先運行服務端程序,再運行客戶端程序
服務器端結果:
在這里插入圖片描述
客戶端結果:
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/379956.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/379956.shtml
英文地址,請注明出處:http://en.pswp.cn/news/379956.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C# 獲取磁盤容量

/// 獲取指定驅動器的空間總大小(單位為B) /// </summary> /// <param name"str_HardDiskName">只需輸入代表驅動器的字母即可 </param> /// <returns> </returns> public static long GetHardDi…

Java——獲取當前線程的對象(currentThread())(兩種方式)

package com.yy.threadmethod;public class Demo2_CurrentThread { /*** public static Thread currentThread()返回對當前正在執行的線程對象的引用。 * 返回&#xff1a;當前執行的線程。返回的是一個Thread* 該方法主要是為了協助 實現通過Runnable接口來對線程進行設置…

HDU2501_多米諾骨牌

題目大意&#xff1a; 有一個大小是 2 x n 的網格&#xff0c;現在需要用2種規格的骨牌鋪滿&#xff0c;骨牌規格分別是 2 x 1 和 2 x 2&#xff0c;請計算一共有多少種鋪設的方法。 解題思路&#xff1a; 找出遞推公式&#xff1a; f[i] f[i-1] f[i-2] * 2; 代碼&#xff1a…

java jar包示例_Java包getSpecificationVendor()方法和示例

java jar包示例包類的getSpecificationVendor()方法 (Package Class getSpecificationVendor() method) getSpecificationVendor() method is available in java.lang package. getSpecificationVendor()方法在java.lang包中可用。 getSpecificationVendor() method is used to…

sys.argv和getopt

0x01 sys.argv sys.argv用來讀取命令行參數&#xff0c;保存程序的文件名和命令參數&#xff0c;讀入的參數以列表保存 import sysprint sys.argv print type(sys.argv)可以看到&#xff0c;sys.argv把空格當成分隔符&#xff0c;空格兩邊的值當做sys.argv的一個元素&#xf…

[導入]《大話設計模式》重印公告

摘要: 《大話設計模式》12月中旬上市&#xff0c;至2008年1月底僅僅一個多月&#xff0c;5000冊即銷售一空&#xff0c;清華大學出版社已經開始重印&#xff0c;也就是說很快可以在二月底或三月初看到新印刷修正過大部分錯誤的《大話設計模式》。 閱讀全文[新聞]《人民日報市場…

Java——線程的四種不同形式

一&#xff0c;休眠線程 public static void sleep(long millis) throws InterruptedException 在指定的毫秒數內讓當前正在執行的線程休眠&#xff08;暫停執行&#xff09;&#xff0c;此操作受到系統計時器和調度程序精度和準確性的影響。該線程不丟失任何監視器的所屬權。…

hdu1053 Entropy hdu2527 Safe Or Unsafe

裸裸的哈弗曼編碼&#xff0c;求出哈弗曼編碼的路徑長度&#xff0c;注意整個字符串為一種字符的情況 View Code #include<iostream>#include<queue>#include<algorithm>#include<vector>using namespace std;struct node{int u,w; node(int a0,in…

Java ListResourceBundle getContents()方法與示例

ListResourceBundle類的getContents()方法 (ListResourceBundle Class getContents() method) getContents() method is available in java.util package. getContents()方法在java.util包中可用。 getContents() method is used to get the contents into the form of an Obje…

DOM元素的所有子元素 .elements

.elements屬性用來獲取某個DOM元素的所有子元素&#xff0c;是個很有用的屬性&#xff0c;可用于用className來獲取指定元素等用途。 轉載于:https://www.cnblogs.com/cly84920/archive/2008/08/06/4427136.html

sys.stdin.read和raw_input函數

sys.stdin.read函數 例子&#xff1a; import sysreadsys.stdin.read() for i in range(len(read)):print i,read[i],-1運行&#xff0c;當執行到readsys.stdin.read()會阻塞&#xff0c;等待我們輸入 我們輸入&#xff1a; h e當輸入&#xff0c;ctrlD結束輸入&#xff0c…

Java ObjectOutputStream writeFields()方法與示例

ObjectOutputStream類writeFields()方法 (ObjectOutputStream Class writeFields() method) writeFields() method is available in java.io package. 在java.io包中提供了writeFields()方法 。 writeFields() method is used to write the buffered fields to the ObjectOutpu…

利用帶關聯子查詢Update語句更新數據

Update是T-sql中再簡單不過的語句了&#xff0c;update table set columnexpression [where condition]&#xff0c;我們都會用到。但update的用法不僅于此&#xff0c;真正在開發的時候&#xff0c;靈活恰當地使用update可以達到事半功倍的效果。 假定有表Table1&#xff08;…

SQL Server 2000數據庫移植到SQL Server 2008R2數據庫服務器中碰到的”3145錯誤”及解決辦法...

辛苦忙碌了一個星期終于安裝配置好了TFS服務器&#xff0c;給每個團隊成員分配了賬戶和郵箱。不過&#xff0c;老機器中的部分數據需要備份到新機器中&#xff0c;其中在移植一個使用DVBBS架設的論壇的時候&#xff0c;出了點問題&#xff0c;記錄如下&#xff0c;以備查找&…

web安全----XSS漏洞之基本原理

0x01 概述 XSS為跨站腳本攻擊&#xff0c;XSS攻擊針對的是用戶層面的攻擊&#xff01;類型有反射型XSS、存儲型XSS、DOM型XSS&#xff0c;這里的DOM可以理解為頁面&#xff0c;或者是所有的標簽、內容之和 0x02 反射型XSS 反射型XSS攻擊流程為&#xff1a; 即&#xff1a; …

面向對象(匿名內部類與有名字內部類的比較)

A:匿名內部類 就是內部類的簡化寫法B:前提 這里的類可以是具體類也可以是抽象類C&#xff1a;格式 new 類名或者接口(){ //表示繼承這個類或實現這個接口重寫方法}D&#xff1a;本質是什么呢&#xff1f; 是一個繼承了該類或者實現了該接口的子類匿名對象E&#xff1a;案…

如何在Python中針對一個值檢查多個變量?

Given multiple variables and they are assigned some values, we have to test a value with these variables. 給定多個變量并為其分配了一些值&#xff0c;我們必須使用這些變量測試一個值。 Let, there are three variables a, b and c and we have to check whether one…

品析《桃花庵歌》

桃花庵歌 【明】唐寅&#xff08;YIN) 桃花塢里桃花庵&#xff0c;桃花庵下桃花仙&#xff1b; 桃花仙人種桃樹&#xff0c;又摘桃花賣酒錢。 酒醒只在花前坐&#xff0c;酒醉還來花下眠&#xff1b; 半醒半醉日復日&#xff0c;花落花開年復年。 但愿老死花酒間&#xf…

面向對象(匿名內部類重寫多個方法調用)

①匿名內部類只針對重寫一個方法的時候使用; ②若有多個方法&#xff0c;通過匿名內部類進行調用的時候&#xff0c;需要一個一個進行調用,比較麻煩&#xff0c;所以不建議使用。 ③匿名內部類是無法向下轉型的&#xff0c;向下轉型需要子類的類名&#xff0c;這里面沒有子類…

c++ 取兩個鏈表的交集_使用C ++程序查找兩個鏈表的交集

c 取兩個鏈表的交集Problem statement: Write a C program to find the intersection of two single linked lists. 問題陳述&#xff1a;編寫一個C 程序來查找兩個單個鏈表的交集。 Example: 例&#xff1a; Let the first linked list be:6->5->2->9->NULLLet …