-
-
Save cundi/eee466e4d9bac023e705457baee8b504 to your computer and use it in GitHub Desktop.
python tcp socket client / server examples
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/python | |
import socket #for sockets | |
import sys #for exit | |
try: | |
#create an AF_INET, STREAM socket (TCP) | |
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) | |
except socket.error, msg: | |
print 'Failed to create socket. Error code: ' + str(msg[0]) + ' , Error message : ' + msg[1] | |
sys.exit(); | |
print 'Socket Created' | |
host = 'www.google.com' | |
port = 80 | |
try: | |
remote_ip = socket.gethostbyname( host ) | |
except socket.gaierror: | |
#could not resolve | |
print 'Hostname could not be resolved. Exiting' | |
sys.exit() | |
print 'Ip address of ' + host + ' is ' + remote_ip | |
#Connect to remote server | |
s.connect((remote_ip , port)) | |
print 'Socket Connected to ' + host + ' on ip ' + remote_ip |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/python | |
#Socket client example in python | |
import socket #for sockets | |
import sys #for exit | |
#create an INET, STREAMing socket | |
try: | |
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) | |
except socket.error: | |
print 'Failed to create socket' | |
sys.exit() | |
print 'Socket Created' | |
host = 'www.google.com'; | |
port = 80; | |
try: | |
remote_ip = socket.gethostbyname( host ) | |
except socket.gaierror: | |
#could not resolve | |
print 'Hostname could not be resolved. Exiting' | |
sys.exit() | |
#Connect to remote server | |
s.connect((remote_ip , port)) | |
print 'Socket Connected to ' + host + ' on ip ' + remote_ip | |
#Send some data to remote server | |
message = "GET / HTTP/1.1\r\n\r\n" | |
try : | |
#Set the whole string | |
s.sendall(message) | |
except socket.error: | |
#Send failed | |
print 'Send failed' | |
sys.exit() | |
print 'Message send successfully' | |
#Now receive data | |
reply = s.recv(4096) | |
print reply |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/python | |
# credits: http://www.binarytides.com/python-socket-server-code-example/ | |
''' | |
Simple socket server using threads | |
''' | |
import socket | |
import sys | |
HOST = '' # Symbolic name, meaning all available interfaces | |
PORT = 8888 # Arbitrary non-privileged port | |
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) | |
print 'Socket created' | |
#Bind socket to local host and port | |
try: | |
s.bind((HOST, PORT)) | |
except socket.error as msg: | |
print 'Bind failed. Error Code : ' + str(msg[0]) + ' Message ' + msg[1] | |
sys.exit() | |
print 'Socket bind complete' | |
#Start listening on socket | |
s.listen(10) | |
print 'Socket now listening' | |
#now keep talking with the client | |
while 1: | |
#wait to accept a connection - blocking call | |
conn, addr = s.accept() | |
print 'Connected with ' + addr[0] + ':' + str(addr[1]) | |
s.close() |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/python | |
# credits: http://www.binarytides.com/python-socket-server-code-example/ | |
''' | |
Simple socket server using threads | |
''' | |
import socket | |
import sys | |
from thread import * | |
HOST = '' # Symbolic name meaning all available interfaces | |
PORT = 8888 # Arbitrary non-privileged port | |
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) | |
print 'Socket created' | |
#Bind socket to local host and port | |
try: | |
s.bind((HOST, PORT)) | |
except socket.error as msg: | |
print 'Bind failed. Error Code : ' + str(msg[0]) + ' Message ' + msg[1] | |
sys.exit() | |
print 'Socket bind complete' | |
#Start listening on socket | |
s.listen(10) | |
print 'Socket now listening' | |
#Function for handling connections. This will be used to create threads | |
def clientthread(conn): | |
#Sending message to connected client | |
conn.send('Welcome to the server. Type something and hit enter\n') #send only takes string | |
#infinite loop so that function do not terminate and thread do not end. | |
while True: | |
#Receiving from client | |
data = conn.recv(1024) | |
reply = 'OK...' + data | |
if not data: | |
break | |
conn.sendall(reply) | |
#came out of loop | |
conn.close() | |
#now keep talking with the client | |
while 1: | |
#wait to accept a connection - blocking call | |
conn, addr = s.accept() | |
print 'Connected with ' + addr[0] + ':' + str(addr[1]) | |
#start new thread takes 1st argument as a function name to be run, second is the tuple of arguments to the function. | |
start_new_thread(clientthread ,(conn,)) | |
s.close() |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/python | |
# Socket server in python using select function | |
# credits: http://www.binarytides.com/python-socket-server-code-example/ | |
import socket, select | |
if __name__ == "__main__": | |
CONNECTION_LIST = [] # list of socket clients | |
RECV_BUFFER = 4096 # Advisable to keep it as an exponent of 2 | |
PORT = 5000 | |
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) | |
# this has no effect, why ? | |
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) | |
server_socket.bind(("0.0.0.0", PORT)) | |
server_socket.listen(10) | |
# Add server socket to the list of readable connections | |
CONNECTION_LIST.append(server_socket) | |
print "Chat server started on port " + str(PORT) | |
while 1: | |
# Get the list sockets which are ready to be read through select | |
read_sockets,write_sockets,error_sockets = select.select(CONNECTION_LIST,[],[]) | |
for sock in read_sockets: | |
#New connection | |
if sock == server_socket: | |
# Handle the case in which there is a new connection recieved through server_socket | |
sockfd, addr = server_socket.accept() | |
CONNECTION_LIST.append(sockfd) | |
print "Client (%s, %s) connected" % addr | |
#Some incoming message from a client | |
else: | |
# Data recieved from client, process it | |
try: | |
#In Windows, sometimes when a TCP program closes abruptly, | |
# a "Connection reset by peer" exception will be thrown | |
data = sock.recv(RECV_BUFFER) | |
# echo back the client message | |
if data: | |
sock.send('OK ... ' + data) | |
# client disconnected, so remove from socket list | |
except: | |
broadcast_data(sock, "Client (%s, %s) is offline" % addr) | |
print "Client (%s, %s) is offline" % addr | |
sock.close() | |
CONNECTION_LIST.remove(sock) | |
continue | |
server_socket.close() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment