Показаны сообщения с ярлыком tcp. Показать все сообщения
Показаны сообщения с ярлыком tcp. Показать все сообщения

среда, 15 июня 2011 г.

Пример клиент TCP и UDP версий клиент-сервера на Python на сокетах.

Всем привет! Сегодня я покажу пример реализации простого клиент-сервера на Python.

Цель:
Реализовать службу Daytime (официальный номер порта 13), как ориентированную, так и не ориентированную на соединение.
Daytime-сервер, ориентированный на соединение прослушивает порт 13. Как только появляется запрос на соединение, сервер принимает запрос и тут же отсылает строку, содержащую информацию о текущем времени и дате. После этого сервер закрывает соединение (все пришедшие во время соединения данные от клиента игнорируются).
Daytime-сервер, не ориентированный на соединение ждет датаграмму на порту 13. Как только появляется сообщение (вся данные в сообщении игнорируются), сервер тут же отсылает строку, содержащую информацию о текущем времени и дате.
Примечание: Стандарт (RFC 867) не устанавливает спецификацию формата возвращаемой строки, но рекомендует чтобы она состояла из печатных ASCII-символов и заканчивалась комбинацией CrLf. Пример строки: “Tuesday, February 22, 1982 17:37:43-PST”.

Исходники:


Клиент сервер на TCP

TCP сервер http://dpaste.com/554737/ :


# -*- coding: utf-8 -*-
__author__ = "dehimer Novikov Denis Yurevich"
# connection-oriented server


import socket
import time 
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(("localhost", 13))
server_socket.listen(5)

print "TCPServer Waiting for client on port 13"

while 1:
    client_socket, address = server_socket.accept()
    have_connect = 1    #if all clients are disconnected
    while have_connect:
        data = client_socket.recv(256)
        print len(data)
        print data
        if (data <> 'Q' and data <> 'q'):
            print "I got a connection from ", address
            data = ('On server now: ' + time.asctime(time.localtime())+ '\n')
            client_socket.send(data)
        else:
            client_socket.close()
            have_connect = 0
            break;



TCP клиент http://dpaste.com/554738/ :


# -*- coding: utf-8 -*-
__author__ = "dehimer Novikov Denis Yurevich"
# connection-oriented client

import socket

client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(('localhost', 13))

while 1:
    
    data = raw_input ( "SEND( TYPE q or Q to Quit):" )
    if (data <> 'Q' and data <> 'q'):
        client_socket.send(data)
        data = client_socket.recv(256)
        print data
    else:
        client_socket.send(data)
        client_socket.close()
        break;

UDP клиент-сервер

UDP сервер http://dpaste.com/554739/ :


# -*- coding: utf-8 -*-
__author__ = "dehimer Novikov Denis Yurevich"
# not a connection-oriented server

import socket
import time

server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_socket.bind(("", 13))

print "UDPServer Waiting for client on port 13"

while 1:
 data, address = server_socket.recvfrom(256)   #receive data and sender's address
 data = ('On server now: ' + time.asctime(time.localtime())+ '\n')
 server_socket.sendto(data, address)
 print  "I got a connection from ( " ,address[0], " " , address[1] , " ) "

UDP клиент http://dpaste.com/554740/ :


# -*- coding: utf-8 -*-
__author__ = "dehimer Novikov Denis Yurevich"
# not a connection-oriented client

import socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

while 1:

 data = raw_input("Type something(q or Q to exit): ")
 if (data <> 'q' and data <> 'Q'):
  client_socket.sendto(data, ('127.0.0.1', 13))
  data = client_socket.recv(256)                 # receive up to 256 bytes
  print data
 else:
  break
client_socket.close()


Результат:

Ориентированный на соединение сервер/клиент:
сервер





клиент





Неориентированный на соединение сервер/клиент:
сервер



клиент






Ну вот собственно все=) Дальше покажу пример чата на сокетах, опять же в TCP и UDP версиях.
На вопросы обязательно отвечу в комментариях. Пишите.