使用UDP建立接收和发送端
重点在于掌握UDP的接收端和发送端的建立流程。
定义UDP发送端步骤:
1.建立udpsocket服务。
2.提供数据并将数据封装到数据包中。
3.通过socket服务的发送功能将数据包发送出去。
4.关闭资源。
定义UDP接收端步骤:
定义UDP接收端
1.定义udpsocket服务。通常会监听一个端口,其实就是给这个接收网络
应用程序定义一个数字标识,方便明确哪些数据过来
该应用程序可以处理
2.定义一个数据包,因为要存储接收到的字节数据,因为数据包对象中
3.通过socket服务的receive方法将受到的数据存入已经定义好的数据包中
4.通过数据包对象的特有功能,将这些不同的数据取出,打印在控制台。
5.关闭资源。
代码实例:UDP发送端
- import java.net.*;
- class UdpSend
- {
- public static void main(String[] args) throws Exception
- {
- //创建udp服务。通过DatagramSocket对象
- DatagramSocket ds=new DatagramSocket();
- //2.确定数据,并封装成数据包。
- byte[] buf="ge men lai le".getBytes();
- DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.0.102"),123);
- //3.通过socket服务将已有的数据包发送出去。通过send方法
- ds.send(dp);
- //4.关闭资源。
- ds.close();
- }
- }
复制代码
代码实例:UDP接收端
- class UdpRec
- {
- public static void main(String[] args) throws Exception
- {
- //1.创建udp socket。建立端点
- DatagramSocket ds=new DatagramSocket(123);
- while(true)
- {
- //2.定义数据包。用于存储数据。
- byte[] buf=new byte[1024];
- DatagramPacket dp=new DatagramPacket(buf,buf.length);
- //3.通过服务的receive方法将收到的数据存到数据包中
- ds.receive(dp);
- //4.通过数据包的方法获取其中数据
- String ip=dp.getAddress().getHostAddress();
- String data=new String(dp.getData(),0,dp.getLength());
- int port=dp.getPort();
- System.out.println(ip+":::"+data+":::"+port);
- //5.关闭资源
- //ds.close();
- }
- }
- }
复制代码
TCP传输
TCP分为客户端和服务端,客户端对应的对象时Socket,
服务端对应的对象时ServerSocket.
客户端:
在建立Socket对象时就可以去连接指定主机。
因为TCP是面向连接的。所以在建立Socket服务时。
就要有服务端存在。并连接成功。形成通路
在该同道中进行数据传输。
客户端步骤:
1.创建Socket服务。并制定要连接的主机和端口。
2.为了发送数据。应该获取socket流中的输出流。
3.将数据写入到获取的输出流中
4.关闭资源
服务端:
1.建立服务端的socket服务。ServerSocket();
并监听一个端口
2.获取链接过来的客户端对象。
通过ServerSocket的accept方法。这个方法
是阻塞式的。
3.客户端发过来数据。服务端使用对应的客户端对象
并获取到该客户端的读取流。
并打印在控制台。
4.关闭服务端(可选)
客户端示例代码:带反馈信息
- class TcpClient
- {
- public static void main(String[] args)throws Exception{
- //建立客户端服务,制定主机和端口号
- Socket s = new Socket("192.168.0.102",10001);
- //获取输出流
- OutputStream out = s.getOutputStream();
- //将数据写入到获取的输出流中
- out.write("Tcp Demo".getBytes());
- //获取读取流,用来接收服务端返回信息
- InputStream in=s.getInputStream();
- //创建缓冲区,读取服务端信息并打印
- byte[] buf=new byte[1024];
- int len=in.read(buf);
- System.out.println(new String(buf,0,len));
- //关闭资源
- s.close();
- }
- }
复制代码 服务端示例代码:接收成功给客户端返回信息
- class TcpServer
- {
- public static void main(String[] args)throws Exception{
- //建立服务端,监听端口号。
- ServerSocket ss = new ServerSocket(10001);
- //接收链接过来的客户端对象
- String s = ss.accept();
- //获取一下客户端IP并打印
- String ip = s.getInetAddress().getHostAddress();
- System.out.println(ip+"*****connect");
- //使用对应的客户端获取该客户端的读取流
- InputStream in = s.getInputStream();
- byte[] buf = new byte[1024];
- //读取客户端数据并打印。
- int len = in.read(buf);
- System.out.println(new String(buf,0,len));
- //获得输出流,用来给客户端返回信息
- OutputStream out=s.getOutputStream();
- //将需要反馈的信息写入到输出流
- out.write("Server Accepted Data ok!".getBytes());
- //关闭资源
- s.close();
- //ss.close();
- }
- }
复制代码
|
|