聊天室

客户端代码:

# Filename: socketClient.py  
  
import socket  
import sys  
import threading  
  
# Client GUI  
from tkinter import *  
import Pmw  
  
  
  
# Create a TCP/IP socket  
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  
# Connect the socket to the port where the server is listening  
server_address = ('localhost', 10000)  
print (sys.stderr, 'connecting to %s port %s' % server_address)  
sock.connect(server_address)  
  
root = Tk()  
# textDisplay    
textDisplay = Pmw.ScrolledText(root)    
textDisplay.pack(expand=1, padx=5, pady=5,side = LEFT)    
# textInput  
textInput = Pmw.ScrolledText(root)    
textInput.pack(expand=1, padx=5, pady=5,side = LEFT)  
# Send Button and its callback    
def sendMsg(event):  
    message = socket.gethostname()+':'+ textInput.get()  
    #print (sys.stderr, 'sending "%s"' % message)  
    print(message)  
    sock.sendall(message.encode())  
    textInput.clear()  
    #data = sock.recv(100)  
    #textDisplay.insert(END, data)  
    #print (sys.stderr, 'received "%s"' % data)  
      
sendBtn = Button(root, text="Send")    
sendBtn.bind('<Button-1>', sendMsg)    
sendBtn.pack(side = LEFT)  
  
def receiveMsg():  
    while True:  
        data = sock.recv(100)  
        print (sys.stderr, 'client received "%s"' % data)  
        textDisplay.insert(END, data)  
      
  
receiveThread = threading.Thread(name='waitForMSG', target=receiveMsg)  
receiveThread.start()  
  
root.mainloop()  

服务器端代码:

# Filename: socketServer.py  
  
import socket  
import sys  
  
# Create a TCP/IP socket  
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  
  
# Bind the socket to the port  
server_address = ('localhost', 10000)  
print (sys.stderr, 'starting up on %s port %s' % server_address)  
sock.bind(server_address)  
  
# Listen for incoming connections  
sock.listen(1)  
  
while True:  
    # Wait for a connection  
    print (sys.stderr, 'waiting for a connection')  
    connection, client_address = sock.accept()  
  
    try:  
        print (sys.stderr, 'connection from', client_address)  
  
        # Receive the data in small chunks and retransmit it  
        while True:  
            data = connection.recv(16)  
            print (sys.stderr, 'received "%s"' % data)  
            if data:  
                print (sys.stderr, 'sending data back to the client')  
                connection.sendall(data)  
            else:  
                print (sys.stderr, 'no data from', client_address)  
                break  
    finally:  
        # Clean up the connection  
        connection.close()  
原文地址:https://www.cnblogs.com/wumac/p/5899924.html