python创建socket客户端与socket服务器,区别不大,有listen方法既为server,发送数据用send方法,可以参照java的socket。
ps:为什么,python的应用无法用Ctrl+C干掉?
参考文章:http://blog.sina.com.cn/s/blog_523491650100hikg.html
#!/bin/python
#python version 3.1+
import socket
class TestServer:
'''这是一个简单的python socket server'''
def __init__(self, ip='localhost', iPort=8771):
'''初始方法'''
self.ip = ip
self.iPort = iPort
def start(self):
print("TestServer start({0}:{1})...".format(self.ip, self.iPort))
cc = 1
ss = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ss.settimeout(1000 * 10)
ss.bind((self.ip, self.iPort))
ss.listen(5)
while cc <= 5: #只接收5次客户端连接
(client, address) = ss.accept()
print("client connecting:",cc)
cc+=1
client.send(b'hello')
client.close()
ss.close()
print("TestServer close, bye-bye.")
if __name__ == "__main__":
ts = TestServer()
ts.start()
这是改进版:
#!/bin/python
#python version 3.1+
import socket
import threading
class ConnectHandler(threading.Thread):
'''与客户端连接的处理类'''
def setConnect(self, connect):
self.connect = connect
def run(self):
msg = '你好'.encode("utf-8")
self.connect.send(msg)
self.connect.close()
class TestServer:
def __init__(self, ip='localhost', iPort=8771):
self.ip = ip
self.iPort = iPort
def start(self):
print("TestServer start({0}:{1})...".format(self.ip, self.iPort))
cc = 1
ss = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ss.settimeout(1000 * 10)
ss.bind((self.ip, self.iPort))
ss.listen(5)
# while cc <= 5:
while True:
(client, address) = ss.accept()
print("client connecting:",cc)
cc+=1
ch = ConnectHandler()
ch.setConnect(client)
ch.start()
#client.send(b'hello')
#client.close()
ss.close()
print("TestServer close, bye-bye.")
if __name__ == "__main__":
ts = TestServer()
ts.start()