套接字编程

  说到套接字编程, 那么什么是套接字呢?

  是这样定义的: 

  源IP地址和目的IP地址以及源端口号和目的端口号的组合称为套接字.其用于标识客户端请求的服务器和服务.

  我们可以将每个进程好比是一座房子,该进程的套接字则好比是一扇门.应用程序位于房子中,运输层位于房子外边.应用程序开发者在套接字的应用层一侧可以控制所有东西, 可是, 他几乎无法控制输出层一侧.

 

一: UDP套接字编程

  UDP套接字的两个通信进程是如何交互的呢?首先, 在使用UDP时, 必须先将目的地址附在该分组上.附在分组上的目的地址是由目的主机的IP地址和目的地的套接字的端口号组成的.同理,发送方的源地址也是有源地址的IP地址和端口号组成.然而, 将源地址附在分组上通常并不是有UDP应用程序代码所为,而是由底层操作系统自动完成的.

  我们用下面的简单的客户-服务器应用程序来演示对于UDP套接字编程

       1> 客户从键盘读入两个整数并想服务器发送

  2> 服务器接收两个整数并将和发送给客户

       3> 客户接收得到的和并将该和显示出来 

 

  UDPClient.py

from socket import *
serverName = "192.168.41.124"
serverPort = 12000
clientSocket = socket(AF_INET, SOCK_DGRAM)
num1 = raw_input("input num1:")
num2 = raw_input("input num2:")
clientSocket.sendto(num1, (serverName, serverPort))
clientSocket.sendto(num2, (serverName, serverPort))
Sum, serverAddress = clientSocket.recvfrom(2048)
print Sum
clientSocket.close()

   

  UDPServer.py

from socket import *
serverPort = 12000
serverSocket = socket(AF_INET, SOCK_DGRAM)
serverSocket.bind(("", serverPort))
print "The server is ready to receive"
while True:
    num1, clientAddress = serverSocket.recvfrom(2048)
    num2, clientAddress = serverSocket.recvfrom(2048)
    Sum = int(num1) + int(num2)
    serverSocket.sendto(str(Sum), clientAddress)

  对于这两个程序,可以在一台主机上运行UDPServer.py,另一台主机上运行UDPClient.py, 保证在UDPClient.py中输入适当的服务器主机名或者是IP地址.接下来首先执行UDPServer.py,然后在客户主机上执行client程序,那么我们输入两个整数,就可以得到经由服务器计算出的两个数的和了.这两个程序完全可以在一台机器上完成.本机既可以当客户端,同时可以当做服务器端.

 

二: TCP套接字编程

     与UDP不同,TCP是一个面向连接的协议.这意味着客户和服务器能够开始互相发送数据之前, 他们先要握手和创建一个TCP连接.TCP连接的一端与客户套接字 相联系,另一端与服务器套接字相联系.当一侧要向另一侧发送数据时, 他只需经过其套接字将数据丢给TCP连接.这与UDP连接不同.

   

  TCPClient.py

from socket import *
serverName = "192.168.41.124"
serverPort = 12000
clientSocket = socket(AF_INET, SOCK_STREAM)
clientSocket.connect((serverName, serverPort))
sentence = raw_input("Input lowercase sentence:")
clientSocket.send(sentence)
modifiedSentence = clientSocket.recv(2048)
print "From server:", modifiedSentence
clientSocket.close()

  

  TCPServer.py

from socket import *
serverPort = 12000
serverSocket = socket(AF_INET, SOCK_STREAM)
serverSocket.bind(("", serverPort))
serverSocket.listen(1)
print "The server is ready to receive:"
while 1:
    connectionSocket, addr = serverSocket.accept()
    sentence = connectionSocket.recv(2048)
    capitalizedSentence = sentence.upper()
    connectionSocket.send(capitalizedSentence)
    connectionSocket.close()

  

   当客户生成TCP套接字时, 他指定了服务器中的欢迎套接字的地址(服务器的IP地址和套接字的端口号), 生成套接字后, 该客户发起了一个三次握手并创建与服务器的一个TCP连接.该程序需运行在两个不同的主机上.

 

 

本文摘自: <<计算机网络-自顶向下方法>>-James F.Kurose Keith W.Ross 著, 如有侵权请告知, 将立即删除.

转载于:https://www.cnblogs.com/spxcds/p/5277291.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Delphi中,套(Socket)编程用到的基本类是TServerSocket与TClientSocket。这两个类全部位于ScktComp单元中。其类型定义如下: type TServerSocket = class (ScktComp.TCustomServerSocket); TClientSocket = class (ScktComp.TCustomSocket)。      在编写程序时,首先要对TServerSocket(在服务器端)与TClientSocket(在客户端)进行实例化。对于TServerSocket的对象,主要设置其服务类型(ServerType)与端口(Port)的属性,然后编写“OnClientRead”事件处理程序的代码,处理来自客户机的请求。如要启动服务器,设置TServerSocket对象的Active属性为真(即Active := True),如要停止服务器,则设置TServerSocket对象的Active属性为假(即Active := False)。      对于TClientSocket的对象,主要设置对方服务器的服务类型(ServerType)、端口(Port)以及IP地址(Address)的属性,之后编写“OnConnect与OnRead”事件处理程序的代码“OnConnect”事件处理程序用来检查与服务器连成功与否(必须在这里进行检查才有效),“OnRead”事件处理程序用来读取服务器发来的信息。如要连服务器,设置TClientSocket对象的Active属性为真(即Active := True;注意:检查连是否成功,必须在“OnConnect”事件处理程序中进行),如要断开与服务器的连,则设置TClientSocket对象的Active属性为假(即Active := False)。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值