python socket實現客戶端與服務器端對話

   最近鞏固下python語言,說真的,使用了這麼多腳本語言,仍是這門比較好玩點,快速,簡潔,容易上手更不用說了。html

   socket 套接字是爲特定網絡協議(例如TCP/IP,ICMP/IP,UDP/IP等)套件對上的網絡應用程序提供者提供當前可移植標準的對象。socket是容許發送和接受數據。創建通訊通道,網絡通訊的每一個端點擁有一個套接字對象爲前提。python

   python socket 這就是python的一個模塊,至於怎麼使用這個模塊,你們能夠查看 如下的網址,裏面的python資料都很全的。http://docs.python.org/2/library/socket.html(英文的,不過你們能夠大概看下,而後看實例就懂得了,很容易) 服務器


  如下寫的代碼仍是不夠完美,哪位高手路過的,請多指點,上代碼...............網絡


1 服務器端app

[root@localhost ~]# cat server.py
#coding:utf8
import time
import sys
import socket
import select
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('127.0.0.1',8989))#綁定IP和端口
server.listen(10) #偵聽
input = [server,sys.stdin]#sys.stdin是標準輸入,從鍵盤輸入
print '請等待鏈接,親!耐心點......'
client,address = server.accept()#獲取到客戶和IP地址
print "鏈接的是:",address
input.append(client)#添加客戶端到imput列表
Ture = 1#定義一個死循環
while Ture:
    print"請輸入聊天的話題,親>>>>>:"
    input_data,out_data,except_data = select.select(input,[],[])#利用select對全部輸入的數據進行監視
    for receive_data in input_data:#這裏就是循環輸入,但這裏要有兩種方式   
       if receive_data == sys.stdin: #這個是處理標準輸入,也就是服務器的使用鍵盤輸入
           data = raw_input()
           if data == '^c':
               running = 0
               client.send(data) #發送到客戶端
               client.close()
               break
           client.send("發送時間: %s:\n%s"%(time.ctime(),data))
       else:#這個就是接收socket的輸入
           data = receive_data.recv(1024)
           print "<客戶端發送的信息>",data
                                                                                                                                                                                                                  
server.close()


2  客戶端socket

 

[root@localhost ~]# cat clien.py
#coding:utf8
import time
import sys
import select
import socket
address = ('127.0.0.1',8989)
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(address)
input = [client,sys.stdin]
Ture = 1
while Ture:
   print '請輸入聊天的話題,親>>>>>:'
   input_data,oupt_data,except_data = select.select(input,[],[])
                                                                                                                                                                          
   for receive_data in input_data:
       if receive_data == client:
           data = client.recv(1024)
           if data == '^c':
               running = 0
               print 'server exist'
               receive_data.close()
               print 'client is over'
               break
           print "<服務器發送的信息>",data
       else:
           client_data = raw_input()
           client.send("發送時間: %s:\n%s"%(time.ctime(),client_data))
client.close()


3  測試!!!ide

  服務器端執行:測試

 

[root@localhost ~]# python server.py
請等待鏈接,親!耐心點......

 

  客戶端執行:優化

 

[root@localhost ~]# python clien.py
請輸入聊天的話題,親>>>>>:


4 服務器端和客戶端聊天對話測試:server

 

客戶端發起對話鏈接:
[root@localhost ~]# python clien.py
請輸入聊天的話題,親>>>>>:
測試socket功能是否正常使用,請回答?
請輸入聊天的話題,親>>>>>:
服務器端口接收信息:
[root@localhost ~]# python server.py
請等待鏈接,親!耐心點......
鏈接的是: ('127.0.0.1', 33371)
請輸入聊天的話題,親>>>>>:
<客戶端發送的信息> 發送時間: Wed Jul 24 09:13:48 2013:
測試socket功能是否正常使用,請回答?
請輸入聊天的話題,親>>>>>:

 

 

服務器端發送信息:
[root@localhost ~]# python server.py
請等待鏈接,親!耐心點......
鏈接的是: ('127.0.0.1', 33371)
請輸入聊天的話題,親>>>>>:
<客戶端發送的信息> 發送時間: Wed Jul 24 09:13:48 2013:
測試socket功能是否正常使用,請回答?
請輸入聊天的話題,親>>>>>:
測試是成功的,不過代碼仍是得優化,功能還須要添加,收到沒?
請輸入聊天的話題,親>>>>>:
客戶端接收信息:
[root@localhost ~]# python clien.py
請輸入聊天的話題,親>>>>>:
測試socket功能是否正常使用,請回答?
請輸入聊天的話題,親>>>>>:
<服務器發送的信息> 發送時間: Wed Jul 24 09:21:15 2013:
測試是成功的,不過代碼仍是得優化,功能還須要添加,收到沒?
請輸入聊天的話題,親>>>>>:


  因爲本人水平有限,代碼寫的不是很完美,下次有時間寫一個像QQ界面的通信軟件.

相關文章
相關標籤/搜索