Heim  >  Artikel  >  Backend-Entwicklung  >  Chatroom-Python-Code-Implementierung

Chatroom-Python-Code-Implementierung

高洛峰
高洛峰Original
2017-02-25 11:30:111525Durchsuche

Im Vergleich zum Java-Chatroom kann Python dies auch. Und es geht eleganter. Es wird Ihnen auf jeden Fall gefallen, dass es so viel weniger Python-Sockets verschiedener Streams gibt.

Was den Inhalt im Zusammenhang mit Wissenspunkten betrifft, werde ich hier nicht näher darauf eingehen.

UDP-Modus

Serverseitig

# coding:utf-8

#  __author__ = 'Mark sinoberg'
#  __date__ = '2016/7/7'
#  __Desc__ = 创建一个简单的套接字监听请求

import socket

HOST = '192.168.59.255'
PORT = 9998

s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.bind(('',PORT))
print '套接字已启动!'
while True:
  data,addr = s.recvfrom(1024)
  print addr,str(' : ')+data

Kunde

# coding:utf-8

#  __author__ = 'Mark sinoberg'
#  __date__ = '2016/7/7'
#  __Desc__ = socket的客户端的简单实现

import socket

PORT = 9998
HOST = '192.168.59.255'
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
words = raw_input('Client:')
while words != 'quit':
  s.sendto(words,(HOST,PORT))
  words = raw_input('Client:')
s.close()

Ist es nicht ganz einfach? Wir müssen darauf achten, dass der zweite Parameter des Sockets SOCK_DGRAM ist. Denn dies unterscheidet sich von SOCK_STREAM im TCP-Modus.

TCP-Modus

Serverseitig

# coding:utf-8

#  __author__ = 'Mark sinoberg'
#  __date__ = '2016/7/7'
#  __Desc__ = 简单的tcpsocket的实现

from socket import *
from time import ctime

HOST = ''
PORT = 9999
BUFFERSIZE = 1024
ADDRESS = (HOST,PORT)

s = socket(AF_INET,SOCK_STREAM)
s.bind(ADDRESS)
s.listen(5)

while True:
  print 'Waiting for clients cennect!'
  tcpclient,addr = s.accept()
  print 'Connected By ',addr

  while True:
    try:
      data = tcpclient.recv(BUFFERSIZE)
    except Exception,e:
      print e.message
      tcpclient.close()
      break
    if not data:
      print "No Data received!"
      break
    senddata = 'Hi,you send me:[%s]%s'%(ctime(),data.encode('utf8'))
    tcpclient.send(senddata.encode('utf8'))
    print addr,' Says:',ctime(),data.encode('utf8')

tcpclient.close()
s.close()

Client

# coding:utf-8

#  __author__ = 'Mark sinoberg'
#  __date__ = '2016/7/7'
#  __Desc__ = 简单的tcp socket客户端的实现

from socket import *

class TcpClient:
  # HOST = 'localhost'
  PORT = 9999
  HOST = '192.168.59.225'
  BUFFSIZ = 1024
  ADDR = (HOST,PORT)
  def __init__(self):
    self.client = socket(AF_INET,SOCK_STREAM)
    self.client.connect((self.HOST,self.PORT))

    while True:
      senddata = raw_input('>>>')
      if not senddata:
        print 'Please input some words!\n>>>'
        continue
      if senddata == "quit":
        break
      self.client.send(senddata.encode('utf8'))
      recvdata = self.client.recv(self.BUFFSIZ)
      if not recvdata:
        break
      print recvdata.encode('utf8')

if __name__ == "__main__":
  client = TcpClient()

TCP-Modus-Demonstrationsergebnis ( Hinweis: Öffnen Sie zuerst die Serverseite) SimpleTCPServer.py

Warten auf Client-Cennect!

Verbunden durch ('192.168.59.225', 63095)('192.168.59.225', 63095) Sagt: Do 7. Juli 16:01:10 2016 Hallo Welt ('192.168.59.225', 63095) Sagt: Do 07.07. 16:01:15 2016 haode Keine Daten empfangen!Warten auf Kundenkontakt!



Client



D:SoftwarePython2python.exe E:/Code/Python/MyTestSet/sockettest/SimpleTcpClient.py

>>>Hallo Welt

Hallo, ihr Schicken Sie mir:[Do. 07. Juli 16:01:10 2016]Hallo Welt>>>Bitte geben Sie ein paar Wörter ein!>>>>> ;haode

Hallo, du schickst mir:[Thu Jul 07 16:01:15 2016]haode

>>>quit

Prozess mit Exit-Code 0 abgeschlossen


Zusammenfassung


Es ist wirklich einfach, einfach TCP oder UDP zu verwenden, aber wenn Sie diese beiden Protokolle besser nutzen möchten, müssen Sie sie sorgfältig entwerfen.

Was ich hier betonen möchte, ist, dass Sie nur auf die angegebenen Parameter achten, wenn TCP und UDP Sockets erstellen.

Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass er zum Lernen aller beiträgt. Ich hoffe auch, dass jeder die PHP-Chinesisch-Website unterstützt.

Weitere Artikel zur Chatroom-Python-Code-Implementierung finden Sie auf der chinesischen PHP-Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn