TCP通信网络编程

1. Socket网络编程

Socket是网络编程的一个抽象概念。通常我们用一个Socket表示“打开了一个网络链接”,而打开一个Socket需要知道目标计算机的IP地址和端口号,再指定协议类型即可。

2. 客户端

大多数连接都是可靠的TCP连接。创建TCP连接时,主动发起连接的叫客户端,被动响应连接的叫服务器。举个例子,当我们在浏览器中访问新浪时,我们自己的计算机就是客户端,浏览器会主动向新浪的服务器发起连接。如果一切顺利,新浪的服务器接受了我们的连接,一个TCP连接就建立起来的,后面的通信就是发送网页内容了。

3. 服务器和客户端之间Socket通信

主要实现了服务器和客户端之间的Socket通信:

服务器

服务器进程首先要绑定一个端口并监听来自其他客户端的连接。如果某个客户端连接过来了,服务器就与该客户端建立Socket连接,随后的通信就靠这个Socket连接了。

所以,服务器会打开固定端口(比如80)监听,每来一个客户端连接,就创建该Socket连接。由于服务器会有大量来自客户端的连接,所以,服务器要能够区分一个Socket连接是和哪个客户端绑定的。一个Socket依赖4项:服务器地址、服务器端口、客户端地址、客户端端口来唯一确定一个Socket。

但是服务器还需要同时响应多个客户端的请求,所以,每个连接都需要一个新的进程或者新的线程来处理,否则,服务器一次就只能服务一个客户端了。

(1)引入模块

# -*- coding: utf-8 -*-

"""

Created on Mon Mar 28 22:28:29 2016

@author: zhanghc

"""

#引入模块

import socket

import threading

import time

(2)创建socket,并监听端口

#创建socket

s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

#监听端口

s.bind(('127.0.0.1',9999))

s.listen(5)

print 'Waiting for connection...'

(3)服务器端创建循环,永久监听来自客户端的连接

while True:

#接受一个新连接

sock,addr=s.accept()

#创建新线程来处理TCP连接

t=threading.Thread(target=tcplink(sock,addr))

(4)创建TCP连接函数,每个连接创建一个新线程

def tcplink(sock,addr):

print 'Accept new connection from %s:%s...' % addr

sock.send('Welcome!')

while True:

data=sock.recv(1024)

time.sleep(1)

if data=='exit' or not data:

break

sock.send('Hello,%s!'%data)

sock.close()

print 'Connection from %s:%s closed.'%addr

客户端程序如下:

# -*- coding: utf-8 -*-

"""

Created on Mon Mar 28 22:40:41 2016

@author: zhanghc

"""

import socket

s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

s.connect(('127.0.0.1',9999))

print s.recv(1024)

for data in ['zhang','liu','wang']:

s.send(data)

print s.recv(1024)

s.send('exit')

s.close()

你可能感兴趣的:(TCP通信网络编程)