Python 超简单的聊天程序
客户端:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
import socket, sys
host = '10.248.27.23'
# host = raw_input("Plz imput destination IP:")
# data = raw_input("Plz imput what you want to submit:")
port = 51423
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
try :
s.connect((host, port))
except socket.gaierror, e:
print "Address-related error connecting to server: %s" % e
sys.exit( 1 )
except socket.error, e:
print "Connection error: %s" % e
sys.exit( 1 )
while 1 :
try :
data = raw_input ( "I say: " )
s.send(data)
buf = s.recv( 1024 )
if len (buf):
print "he say: " + buf
except :
print "Dialogue Over"
s.close()
sys.exit( 0 )
|
服务器:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
import socket, traceback, sys
host = ''
port = 51423
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1 )
s.bind((host, port))
s.listen( 1 )
ClientSock, ClientAddr = s.accept()
while 1 :
try :
buf = ClientSock.recv( 1024 )
if len (buf):
print "he say: " + buf
data = raw_input ( "I say: " )
ClientSock.sendall(data)
except :
print "Dialogue Over"
ClientSock.close()
sys.exit( 0 )
|
模拟qq聊天,语言环境:Python3
示例代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
# 编写一个程序,模拟qq聊天
# 要求:程序可以同时发消息和收消息,发和收的过程中程序不退出
# 思路:使用socket来完成(socket 是全双工模式,可以实现收和发同时进行),定义俩个线程,一个负责发消息、一个负责收消息
from threading import Thread
from socket import *
def rec_data():
while True :
rec_info = udpsocket.recvfrom( 1024 )
print ( "\r>>%s:%s" % (rec_info[ 1 ], rec_info[ 0 ].decode( "gb2312" )))
print ( "<<" , end = "")
def send_date():
while True :
send_mes = input ( "<<" )
udpsocket.sendto(send_mes.encode( "gb2312" ), (desip, desport))
udpsocket = None
desip = ""
desport = 0
def main():
global udpsocket
global desip
global desport
desip = input ( "对方IP:" )
desport = int ( input ( "对方端口:" ))
udpsocket = socket(AF_INET, SOCK_DGRAM)
udpsocket.bind(("", 9001 ))
tr = Thread(target = rec_data)
ts = Thread(target = send_date)
tr.start()
ts.start()
tr.join()
ts.join()
if __name__ = = '__main__' :
main()
|
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对服务器之家的支持。如果你想了解更多相关内容请查看下面相关链接
原文链接:https://blog.csdn.net/wdz306ling/article/details/86623436