Webページでは数式を表すためにLaTeX表記が使えるMathJaxを利用しています。 WebブラウザにはSafari/Chrome/Firefoxを使って下さい(IEでは表示できないようです。)

ネットワークプログラミング(1)

TCPサーバスクリプト

同時接続数(処理可能なスレッド)を5としたサーバスクリプト

#!/usr/bin/env python
# -*- coding: utf-8 -*-
##### server process(prescribed listening port) with maximun 5 threads
# usage:
# $ ./tcp_server.py
###
import socket
import threading

bind_ip = "127.0.0.1"
bind_port = 9999

# create socket object
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# bind ip + port as a server 
server.bind((bind_ip, bind_port))
# listen with maximum 5 waiting queues
server.listen(5)  ### server while loop
print "Listening on %s: %d" % (bind_ip, bind_port)

# thread processing a task from clients
def handle_client(client_socket):
    request = client_socket.recv(1024)
    # print data (max buffer size 1024) sent from client
    print "Received: %s" % request
    # send a message "Ack" to client
    client_socket.send("Ack!, connecting..")
    client_socket.close()

while True:
    # event: a conncetion from client
    client, addr = server.accept()
    print "Accepted connection from %s: %d" % (addr[0], addr[1])
    # preapre execution for thread processing by a client connecion
    client_handler = threading.Thread(target=handle_client, args=(client,))
    # start thread
    client_handler.start()

次のような、実行結果を得る。

$ ./tcp_server.py
Listening on 127.0.0.1: 9999
Accepted connection from 127.0.0.1: 58989
Received: Hello server

クライアントスクリプト

指定したサーバに接続してサーバからの応答を表示する

#!/usr/bin/env python
# -*- coding: utf-8 -*-
##### coonect a server specifying server_addr server_port
## usage:
# $ ./tcp_client.py server_addr server_port
####
import socket
import sys

# For web server
##target_host = "www.google.com"
##target_port = 80
#target_host = "127.0.0.1"
#target_port = 9999
argvs = sys.argv
target_host = argvs[1]
target_port = int(argvs[2])

# create socket object
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

#connecting the target host
client.connect((target_host, target_port))

# send data to the server
## for web server
#client.send("GET / HTTP/1.1/\nHost: google.com\r\n\r\n")
client.send("Hello server")

#received data from connecting server with buffer size 4096
response = client.recv(4096)
print response

実行結果の例である。

$ ./tcp_client.py 127.0.0.1 9999
Ack!, connecting..