目的主机的IP地址是目的地址的一部分。通过在分组中包含目的地的IP地址,因特网中的路由器将能够通过因特网将分组选路到目的主机。但是因为一台主机可能运行多个网络应用进程,每一个进程具有一个或者多个的套接字(socket),所以在目的主机指定特定的套接字是必要的。当生成一个套接字时。就为其分配一个
端口号(port number)的标识符。因此,分组的目的地址也包括该套接字的端口号。所以,发送进程等为分组附上的目的地址是由目的主机的IP地址和目的套接字的端口号组成的,因此我们将看到,发送方的源地址也是由源主机的IP地址和源套接字的端口号组成的,该源地址也要附在分组上。然而,附加源地址通常不是UDP完成,而是操作系统的底层自动完成的。
假设我们将实现如下的简单客户-服务器应用程序来演示UDP-TCP的套接字编程(Python实现)
1.客户从键盘读取一行字符并将数据发送给服务器。
2.服务器接收数据并且转换字符到大写。
3.服务器将修改的数据发送给客户。
4.客户接收数据并在其监视器上显示出来。
UDPClient.py
-
from socket import *
-
serverName = '183.220.109.66'
-
serverPort = 12000
-
clientSocket = socket(AF_INET, SOCK_DGRAM)
-
message = raw_input( 'Input lowervase sentence:' )
-
clientSocket.sendto(message,(serverName,serverPort))
-
modifiedMessage,serverAddress = clientSocket.recvfrom(2048)
-
print modifiedMessage
-
clientSocket.close()
UDPServer.py
-
from socket import *
-
serverPort = 12000
-
clientSocket = socket(AF_INET, SOCK_DGRAM)
-
serverSocket.bind(('',serverPort))
-
print "The server is ready to receive"
-
while True:
-
message,clientAddress=serverSocket.recfrom(2048)
-
modifiedMessage = message.upper()
-
serverSocket.sendto(modifiedMessage,clientAddress)
TCPserver.py
-
#!/usr/bin/env python
-
#import socker moudle
-
from socket import *
-
serverPort=12000
-
clientSocket=scoket(AF_INET,SOCK_STREAM)
-
serverSocket.bind(('',serverPort))
-
serverSocket.listen(1)
-
print 'The server is ready to servive'
-
while 1:
-
connectionSocket, addr=serverSocket.accpet()
-
sentence =connectionSocket.recv(1024)
-
capitalizedSentence=sentence.upper()
-
connectionSocket.send(capitalizedSentence)
-
connectionSocket.close()
TCPclient.py
-
!#/usr/bin/env python
-
#import socket moudle
-
from socket import *
-
serverName='servername'
-
serverPort=12000
-
clientSocket-scoket(AF_INET,SOCK_STREAM)
-
clientSocket.connet((serverName,serverPort))
-
sentence=raw_input("make a sentence: ")
-
clientSocket.send(sentence)
-
modifiedSentence=clientSocket.recv(1024)
-
print 'From Server: ', modifiedSentence
-
clientSocket.close()
---------------------------------------测试回馈-----------------------------------------------------
# ./udpserver.py
Traceback (most recent call last):
File "./udpserver.py", line 6, in
serverSocket.bind(('',serverPort))
NameError: name 'serverSocket' is not defined
#./tcpserver.py
Traceback (most recent call last):
File "./tcpserver.py", line 5, in
clientSocket=scoket(AF_INET,SOCK_STREAM)
NameError: name 'scoket' is not defined
阅读(1557) | 评论(0) | 转发(0) |