第九讲 网络编程

网络协议与TCP/IP

IP地址Port(端口)

端口号范围:0-65535之间,0-1023之间端口数用于知名网络服务和应用

 

UDPTCP

TCP:传输控制协议,面向连接的通信协议,等待应答

UDP:用户数据报 ,是无连接的通信协议,不等待应答

 

Socket

Socket是网络驱动层提供给应用程序程序的接口和一种机制。

Socket在应用程序中创建,通过一种绑定机制与驱动程序建立关系,告诉自己所对应的IPPort..

 

Socket数据发送过程

1.产生Socket.

2.调用bind将Socket的信息通知给驱动程序。

3.应用程序将要发送给的数据传送给Socket.

4.驱动程序从Socket取出数据并通过网卡发送出去。

 

JAVA中的网络编程类

1.位于java.net包中

2.DatagramSocket类用于UDP通信

3.ServerSocket类用于TCP通信的服务器端

4.Socket类用于TCP通信的服务器和客户端。

 

UDP网络程序

DatagamSocket类和DatagramPacket 

构造函数

public DatagamSocket()主动给对方发送数据,不接受对方发送的数据,自动分配端口

public DatagamSocket(int port)有可能先接受数据,自己指定端口号,

public DatagamSocket(int portInetAddress laddr)在多个IP地址上运行,明确指定发送接收的IP地址

close()不使用关闭,释放对象。

send(DatagramPacket p)发送UDP数据包

receive()接受UDP数据包

如果把DatagamSocket比作创建的港口码头,那么DatagamPacket就是发送和接收数据的集装箱。

构造函数:

Public DatagamPacket(byte[] buf,int length)仅指定了数据包的缓冲区和缓冲区大小

接受UDP数据时,程序事先无法知道哪个地址和端口Socket发的

Public DatagamPacket(byte[] buf,int length,InetAddress address,int port) 指定了数据包的缓冲区和缓冲区大小,还指定了接受数据包的目标地址和端口。

发送数据时,必须事先标明接受地址信息。并传送给缓冲区

 

getInetAddressgetPort方法

对方的IP地址和端口号也是包装到DatagamPacket中,从getInetAddressgetPort方法得到。

 

getDatagetLength方法

先定义个相对大的字节数组作为缓冲区,发送数据包不能超过字节数组长度,若小于字节数组,只有部分为真正接收数据。

getData返回字节数组缓冲区去,getLength返回实际接受长度。

 

InetAddress

用于表示计算机IP地址的一个类,而在日常用192.168.0.1www.it315.org字符串

getByName静态方法:根据以上字符串返回InetAddress实例对象

getHostAddress方法返回InetAddress192.168.0.1格式

 

最简单的UDP程序

字符串与字节数组之间的双向转换

UDP接收程序必须先启动运行,才能接收UDP发送程序发送的数据。

start命令来打开新命令行窗口的好处

解决发送中文字符串的问题 

 

UDP程序编写网络聊天程序

分三步骤:

1. 编写图形用户界面

2. 编写网络消息发送功能

3. 编写网络消息接收功能

 

TCP网络程序的工作原理

TCP客户端程序与TCP服务器端程序的交互过程:

1. 服务器程序创建一个ServerSocket,然后调用accept方法等待客户来连接。

2. 客户端程序创建一个Socket并请求与服务器建立连接。

3.服务器接受客户的链接请求,并创建一个新的Socket与该客户建立专线连接。

4.建立了链接的两个Socekt在一个单独的线程(由服务器程序创建)上对话。

 

ServerSocket

构造函数:

Public ServerSocket()

Public ServerSocket(int port)

Public ServerSocket(int port,int backlog)

Public ServerSocket(int port,int backlog,InetAddress bindAddr)

Close()

Accept

 

Socket

构造函数:

Public Socket()

Public Socket(String host,int port)

Public Socket(InetAddress address,int port)

Public Socket(String host,int port,InetAddress localAddr,int localPort)

getInputStreamgetOutputStream方法

 

简单的TCP服务器程序

TCP服务器程序必须先启动运行,TCP客户程序才能连接上TCP服务器

使用windows提供的telnet程序测试TCP服务器程序。

使用BufferedReader包装类,从网络输入流中一次读取一行文本。

如何打开telnet程序的本地回显功能。

 

TCP服务器程序模型的编写要点:

TCP服务器程序要想接受多个客户端连接,需要循环调用ServerSocket.accept方法。

服务器程序与每个客户端连接的会话过程不能相互影响,需要在独立的线程中运行。

 

如何检测和解决端口冲突问题

使用netstat -na命令查看当前正在被使用的TCP端口号

通过一个配置参数来指定TCP服务程序所使用的端口号。
将用户所指定的端口号保存到一个文件中,当服务器程序下次启动运行时,直接从文件中读取哪个端口号。

 

TCP网络连接上传递对象

ObjectInputStreamObjectOutputStream可以从底层输入流中读取对象类型的数据和将对象类型的数据写入到底底层输出流。

使用ObjectInputStreamObjectOutputStream来包装底层网络字节流,TCP服务器和TCP客户端之间就可以传递对象类型的数据。

 

访问Internet网络资源

Java.net包中还有URL,URLDecoder,URLEncoder.URLConnection,HttpURLConnection等类

 

URL统一资源定位符

URL的基本组成:协议,主机名,端口号,资源名

http默认端口80

URL编码规则: 

 

HTTP协议

HTTP协议的会话过程

HTTP请求消息

HTTP响应消息

 

URL

构造方法(都可引发MalformedURLException

Public URL(String spec)

Public URL(String protocol,String host,int port,String file)协议名 主机名 端口号 资源本身名

Public URL(URL context,String spec)

getProtocolgetHost,getPort,getFile

openConnection方法返回URLConnection对象

 

工厂设计模式

URL类的setURLStreamHandlerFactory(URLStreamHandlerFactory)静态方法

StreamHandlerFactory类的createURLStreamHandler(String protocol) 

 

URLConnectionHttpURLConnection

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值