1. 程式人生 > >Python基於socket程式設計(TCP版聊天 含配置)

Python基於socket程式設計(TCP版聊天 含配置)

目錄

一、eclipse配置pyDev

(已經安裝並配置了eclipse)

1. 安裝

點選前往官網下載
下載:pydev 6.1.0.zip

將pydev 6.1.0.zip解壓,將feafures和plugins兩個目錄的檔案複製到eclipse資料夾下相應目錄即可。

2.eclipse+pydev配置

注意:windows的使用者名稱、eclipse的workspace都請用英文。否則你後面通過pip安裝python包的時候會不成功的。python處理中文也容易出錯。


執行eclipse,新建專案
在這裡插入圖片描述
在這裡插入圖片描述
這個時候finish是不可用的,你需要點選
在這裡插入圖片描述
然後點選Quick Auto-Config
在這裡插入圖片描述
點選finish
然後 open
在這裡插入圖片描述

3. eclipse配置

在這裡插入圖片描述
(1)設定workspace文字檔案預設字符集
位置:General->workspace
設定:
Text file encoding 為utf-8
New text file line delimiter 為Unix
在這裡插入圖片描述
(2)設定pep8
位置:PyDev->Editor->Code Analysis
設定:pep8設定為Warning
在這裡插入圖片描述
(3)設定自動完成
位置:PyDev->Editor->Save Actions
設定:
Auto-format editor contents before saving? 勾選上
Update date field? 勾選上
Date field name: 下劃線update下劃線
Date field format:yyyy-MM-dd HH:mm
在這裡插入圖片描述


(4)設定新建模組的模板
位置:PyDev->Editor->Templates
在這裡插入圖片描述
選擇,然後點選edit…按鈕,修改內容:

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
u'''
Created on ${date}

@author: ${user}
'''
__author__ = 'xxx <[email protected]>'
__version__ = '1.0.0'
__company__ = u'xxxx'
__updated__ = '1900-01-01 00:00'

if __name__ == "__main__":
    pass
${cursor}

(可以自行修改,也可以不設定)

(5)設定程式碼風格
位置:PyDev->Editor->Code Style->Code Format
Use autopep8.py for code formatting? 勾選上
在這裡插入圖片描述
配置完成。

二、Tcp聊天(不可視)

1. 架構

內容如下:
在這裡插入圖片描述
過程:
(1)建立PyDev Project工程
在這裡插入圖片描述

(2)建立client包和server包
在這裡插入圖片描述
在這裡插入圖片描述
同理,建立server包。

(3)建立PyDev Module檔案
client包下建立client
在這裡插入圖片描述
在這裡插入圖片描述
同理,server包下建立server。

2. 程式碼

Client:

import socket
s = socket.socket()
host = '192.168.43.66'
port = 12345
s.connect((host, port))
print('Linked')
info = ''
while info != 'exit':
    print('server:' + info)
    send_mes = input()
    s.send(send_mes.encode())
    if send_mes == 'exit':
        break
    info = s.recv(1024).decode()
s.close()

Server:

import socket
host = '192.168.43.66'
port = 12345
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((host, port))
s.listen(1)
sock, addr = s.accept()
print('Connection built')
info = sock.recv(1024).decode()
while info != 'exit':
    print('client:' + info)
    send_mes = input()
    sock.send(send_mes.encode())
    if send_mes == 'exit':
        break
    info = sock.recv(1024).decode()
sock.close()
s.close()

3. 執行結果

客戶端:
在這裡插入圖片描述
伺服器:
在這裡插入圖片描述

三、Tcp聊天(可視介面)

1. 安裝wxpython

安裝較為簡單,除了選擇安裝路徑,基本一路next
安裝教程:點此檢視
安裝完成,開啟
在這裡插入圖片描述

2. 建立客戶端可視介面

構造如下:
在這裡插入圖片描述
在這裡插入圖片描述
如何使用wxFormBuilder生成介面:
只需注意每次要先在左邊選中所要放置控制元件等的父類容器,再在右邊選擇
在這裡插入圖片描述
例如,建立一個窗體的第一步,選擇forms放置一個Frame
在這裡插入圖片描述
在這裡插入圖片描述
然後設定layout
在這裡插入圖片描述
按照順序新增進去即可。

一些常用知識:
設定layout的線性方向
在這裡插入圖片描述
設定layout或控制元件所佔其空間比例:
在這裡插入圖片描述
佔滿空間
在這裡插入圖片描述

3. 其他設定

專案的code_generation勾選為Python
在這裡插入圖片描述
選中button,依次在events中為三個button新增click事件
在這裡插入圖片描述
此處可檢視python程式碼在這裡插入圖片描述

預設wx.style不支援換行,勾選上wxTE_MULTLINE設定換行
在這裡插入圖片描述

4. 匯出

儲存,生成可視介面檔案
再按F8獲取noname.py檔案
在這裡插入圖片描述
可視介面建立完成。

5. eclipse建立檔案

和上面相同的方法構建;
將上面匯出的noname.py檔案匯入(匯入之後會報錯,需要安裝pip和下載wxpython庫,方法:win10安裝pip&下載wxpython庫
建立一個PyDev Module檔案,命名為clientUI;
在這裡插入圖片描述

6. 程式碼

clientUI:

import wx
from client import noname
from socket import *

s = socket(AF_INET, SOCK_STREAM)


class ClientFrame(noname.MyFrame1):
    def __init__(self, parent):
        noname.MyFrame1.__init__(self, parent)

    def btn_in(self, event):
        address = self.m_textCtrl1.GetValue()  # 伺服器的ip地址
        port = int(self.m_textCtrl4.GetValue())  # 伺服器的埠號
        s.connect((address, port))

    def btn_send(self, event):  # 傳送訊息
        buffsize = 1024  # 接收資料的快取大小
        senddata = self.m_textCtrl3.GetValue()  # 獲得輸入欄的內容
        s.send(senddata.encode())  # 傳送訊息
        recvdata = s.recv(buffsize).decode('utf-8')  # 接收訊息,格式轉換
        self.m_textCtrl2.AppendText('\n' + recvdata)
        self.m_textCtrl3.SetValue("")  # 清空輸入欄

    def btn_out(self, event):
        self.Close(True)  # 關閉視窗


def main():
    app = wx.App(False)
    frame = ClientFrame(None)
    frame.Show(True)
    # 啟動視窗
    app.MainLoop()


if __name__ == "__main__":
    try:
        main()
    finally:
        s.close()

注意自己的button的click事件名稱。
server程式碼與上一個相同。

7. 執行

先執行server,再執行clientUI
開始傳送訊息
在這裡插入圖片描述
over