免费空间asp网站/奶茶软文案例300字
前言
最近学习了UDP,TCP协议在网络编程中的应用,写一点东西总结一下复习用。
UDP协议
该协议是一种不需要双方建立通信连接的协议,以数据包的形式发送数据,是一种不安全的协议。
以下代码展示了一个客户端发送数据,服务端接收数据的小例子。
UDP协议发送端发送数据
/** UDP协议发送数据* 1.创建发送端Socket对象 (DatagramSocket 用来接收发送数据报包的套接字)* 2.创建数据,打包数据(数据报包对象)* 3.调用Socket对象的发送方法发送数据包* 4.释放资源* */import java.io.IOException;
import java.net.*;
import java.util.Scanner;public class Send {public static Scanner sc = new Scanner(System.in);public static void main(String[] args) throws IOException {//创建Socket对象;DatagramSocket datagramSocket = new DatagramSocket();while(true){System.out.println("请输入数据");String s="";s=sc.nextLine();if(s.equals("good bye")) break;//创建发送的数据;byte[] bys = s.getBytes();//长度;int len=bys.length;//IP地址对象;InetAddress address = InetAddress.getByName("DESKTOP-KP5GLHE");//端口;int port = 10086;//创建数据报包对象; 向addressIP地址上的端口为port的进程发送长度为len的byte[]数据;DatagramPacket datagramPacket = new DatagramPacket(bys,len,address,port);//发送;datagramSocket.send(datagramPacket);}//释放资源;//datagramSocket.close();}
}
接收数据端
/*
* UDP协议接收数据
* 1.创建接收端Socket对象
* 2.创建一个数据报包对象
* 3.调用Socket对象的接收数据
* 4.解析数据,显示
* 5.释放资源
*
* */import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;public class Receive {public static void main(String[] args) throws IOException {//接收对象;DatagramSocket datagramSocket = new DatagramSocket(10086);while(true){//创建接收数据报包对象;byte[] bys = new byte[1024];int len=bys.length;DatagramPacket datagramPacket = new DatagramPacket(bys,len);//接收数据;datagramSocket.receive(datagramPacket);//阻塞式方法;//获取数据;byte[] bys2 = datagramPacket.getData();len = bys2.length;//获取发送方的ip地址;InetAddress address = datagramPacket.getAddress();String ip = address.getHostAddress();String s = new String(bys2,0 ,len);System.out.println(s+" "+ip);}//释放资源;//datagramSocket.close();}
}
注意
接收端接收方法为阻塞式方法,毕竟不可能没有数据发送就接收到。
感觉这个可以理解为管程机制。
TCP协议
三次握手建立连接,四次挥手断开连接,是一种需要接收双方同时建立连接的协议。
以下代码需首先启动服务器端,若先启动客户端,则会抛出异常,该异常很好理解,基于TCP协议要求服务器端客户端都在线,若先启动客户端则找不到服务器端,三次握手第一次便无法成功,故发生找不到服务器异常。
客户端
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;/*
* TCP协议发送数据
* 1.创建发送端的Socket对象,若成功则说明连接建立成功
* 2.获取输出流,写数据
* 3.释放资源
* */
public class Client {public static void main(String[] args) throws IOException {//创建发送端Socket对象;Socket socket = new Socket("192.168.63.1",12386);//获取输出流;OutputStream os = socket.getOutputStream();//写数据;os.write("hello world".getBytes());//从客户端接收回传信息;InputStream inputStream = socket.getInputStream();byte[] bys = new byte[1024];int len = inputStream.read(bys);String res = new String(bys,0,len);System.out.println(res);//释放资源;socket.close();}
}
服务器端
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;/*
* TCP协议接收数据
* 1.创建接收端的Socket对象(ServerSocket)
* 2.监听客户端连接,返回一个对应的Socket对象(三次握手)
* 3.获取输入流
* 4.释放资源
* TCP服务器端不应该关闭,时刻等待不同客户端的连接,
* 故每次与客户端通信完成后,应释放与该客户端的连接。
* */
public class Server {public static void main(String[] args) throws IOException {//创建;ServerSocket serverSocket = new ServerSocket(12386);//监听客户端连接,返回一个Socket对象Socket socket = serverSocket.accept();//阻塞方法,等待客户端连接;//获取输入流;InputStream is = socket.getInputStream();byte[] bys = new byte[1024];int len = is.read(bys);String s = new String(bys,0,len);String ip = socket.getInetAddress().getHostAddress();System.out.println(ip+" "+s);//给客户端写一个数据表示已收到数据;OutputStream outputStream = socket.getOutputStream();outputStream.write("I get it".getBytes());//关闭与该客户端的连接,释放资源;socket.close();}
}
总结
暂无。
github 获取代码
案例代码