明日のためのプログラムその7。Pythonことはじめ。の4

ということで、socketのサーバの第一弾のテストの最終。
このあとクラスにしましょう。

#-------------------------------------------------------
import sys
import socket
import traceback
import time
#--------------------------------------
def localAccept(s):
	try:
		conn, addr = s.accept()
		return	conn, addr
	except Exception as e:
		if e.args[0]==10035 or e.args[0]==11:
			return	None,None
#--------------------------------------
def localRecv(conn,n):
	try:
		dat = conn.recv(n)
		return	dat
	except Exception as e:
		if e.args[0]==10035 or e.args[0]==11:
			return	None
#--------------------------------------
def RSOCKSV(address,port):
	ct = 0;
	with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
		s.bind((address, port))
		s.listen(10)
		s.setblocking(False)
		while True:
			mes = "";
			#------------------------------------------------
			conn,addr = localAccept(s)
			if conn==None:
				if ct==0:
					print("●\r",end="")
				else:
					print("〇\r",end="")
				ct = ct + 1;
				if ct == 2:
					ct = 0
				time.sleep(0.5)
				continue
			conn.setblocking(False)	#LINUXだとこれをしないとrecvがblockingしてしまう
#			with conn:
			while True:
				dat = localRecv(conn,3)
				if not dat:
					print("complete?");
					break
				mes = mes + dat.decode('utf8')

			print(mes);
			print("one cours !")	#ここでThreadを生成させよう
			time.sleep(1)
			conn.sendall(b'complete?')	#CLIENTに戻す
#--------------------------------------
if True:
	RSOCKSV('127.0.0.1', 12345)

クライアント側。
まぁクライアント側はsendしてrecvするだけです。

import socket

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:

	s.connect(('127.0.0.1',12345))
	s.sendall('----+----ひらひら1----+----2----+----3----+----4----+----5----+----6'.encode('utf-8'))
	data = s.recv(1024)
	print(repr(data))

結果

complete?
----+----ひらひら1----+----2----+----3----+----4----+----5----+----6
one cours !

まぁこんな感じです。

if e.args[0]==10035 or e.args[0]==11:

のところは、linux(CentOS)でやってみたら例外11がでたので、ここらへんはまぁWinsockとの違いなので仕方ないとこです。
最終的に何をやりたいかっていうと、socket経由でmessageを受け取り、なんらかコマンドやらなにやらを実行させたいってことです。

で、ここまできて気が付きました。

この簡単さはなんだ!

って感じ。
うぅーーん。こりゃPython、流行るわけだわね。(o^^o)

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です