-
TCP 通讯传输对象查看全部
-
死循环,优先级的问题(多线程)查看全部
-
UDP Services查看全部
-
Socket 通信模型查看全部
-
URL 的应用查看全部
-
java 网络支持查看全部
-
端口号:HTTP:80 FTP:21 talent:23查看全部
-
net端口号查看全部
-
基于UDP的socket通信 1.服务器端 //1.创建服务器端的DatagramSocket,指定端口号 DatagramSocket socket = new DatagramSocket(8800); //2.创建一个DatagramPacket,用于接收来自客户端的信息 byte[] data = new byte[1024]; DatagramPacket packet = new DatagramPacket(data, data.length); //3.通过DatagramSocket实例调用receive()来接收数据 socket.receive(packet); //这里会一直阻塞等待接收数据,接收到才返回,并将数据存在packet中 //4.读取数据 String info = new String(data, 0, packet.getLength()); System.out.println("Server, data: "+info); 2.客户端: //1.定义服务器端的地址、端口号,以及要发送的数据 InetAddress address = InetAddress.getByName("localhost"); int port = 8800; byte[] data = "user: xzhang76, password: 123".getBytes(); //2.创建要发送的数据报,封装地址、端口号,以及要发送的数据 DatagramPacket packet = new DatagramPacket(data, data.length, address, port); //3.创建用于发送的DatagramSocket实例 DatagramSocket socket = new DatagramSocket(); //4.通过DatagramSocket实例,调用send()来发送数据 socket.send(packet); 3.server端回复数据和client接收数据,自己看代码 (如图是客户端接收数据)查看全部
-
UDP---DatagramPacket 1.UDP协议(用户数据包协议)是面向无连接的、不可靠的、无序的数据传输 基于UDP协议的通信是以数据包(DatagramPacket)为数据传输的载体 进行数据传输时,首先需要将要传输的数据定位成数据报(Datagram),在数据报中封装了数据所要到达的Socket(主机地址和端口号),然后再将数据报发送出去。 2.UDP通信需要的两个类 (1)DatagramPacket类 这是一个封装了数据的数据报类,表示UDP通信时的数据单元 (2)DatagramSocket类 这是端到端通信的类,通过这个桥梁,可以实现端到端的通信 3.一些常用方法可以查阅JDK文档查看全部
-
输出关闭会导致socket关闭查看全部
-
业务分析查看全部
-
使用多线程实现多客户端通信 1.实现思路如图 精髓在于: 每次在Server端调用accept()接受client连接请求之后(返回一个socket),会为每个socket分配一个专门的线程去处理输入输出流。 这个的代码实现就在于: 创建一个专门的Thread子类,在构造方法中传入对应的socket变量。 2.具体实现 (1)Server端 while(true){ socket = serverSocket.accept();//阻塞等待,连接成功后返回一个socket实例 //创建一个新的线程,并启动 new ServerThreadTest(socket).start(); } (2)ServerThread实现 //重写run()方法 public void run() { InputStream is = null; BufferedReader br = null; OutputStream os = null; PrintWriter pw = null; try{ // 3.输入输出流 is = socket.getInputStream(); br = new BufferedReader(new InputStreamReader(is));//字节流转换成字符流,并添加缓冲 String info = null; while((info=br.readLine())!=null){ System.out.println("*****ServerThread, request: "+info); } socket.shutdownInput(); …… (3)Client端不需要改变查看全部
-
基于TCP的Socket编程 6.客户端 //1.创建客户端socket,指定服务器地址和端口号 Socket socket = new Socket("localhost", 8888); //2.输出流向服务器发送数据 OutputStream os = socket.getOutputStream(); PrintWriter pw = new PrintWriter(os); //转化成打印流 pw.write("User: xzhang76 Password: 123"); pw.flush(); socket.shutdownOutput(); pw.close(); os.close(); socket.close(); 7.一些思考:服务器端和客户端输入输出流的先后顺序(例子是没加响应的代码) (1)OutputStream一端先退出,InputStream会不会读不到数据? 在server端接收数据之前加5s延时,这样就会出现client发送完数据就直接退出了,而server还在等待client的数据。那么这样server会不会收不到client的数据? 答案和结论: 还是会收到client的数据,因为server端的socket通道还未关闭,client的数据还存在于这个socket中。就算client退出了,但是数据还在socket中,server依然能收到。 (2)OutputStream一端一直不发数据,InputStream一端会不会直接退出了? 如果client一直不给server发数据,server会不会先退出了?可以在client发送数据之前加一个断点,让client一直不通过OutputStream向socket发送数据,server会怎样? 答案和结论: server这一端会在InputStream的readline()这里一直阻塞等待数据,不太清楚readline()的实现,但是readline()确实会一直阻塞等待,直到读取到数据。然后它会在下一行读取到null时退出while,最后才会退出进程。查看全部
-
基于TCP的Socket编程 1.TCP协议是面向连接、可靠地、有序的,以字节流方式发送数据 基于TCP的Socket编程需要两个重要的类: 服务端的SeverSocket和客户端的Socket类(具体看JDK文档) 2.具体实现步骤如图 3.服务器端实现 (1)创建SeverSocket对象,绑定监听端口 new ServerSocket(8888); (2)通过accept()方法监听客户端的请求 accept()会阻塞等待来自客户端的请求,接收到客户端的请求之后就会返回一个Scoket对象实例,表示连接建立 (3)连接建立之后,通过输入输出流在socket实例中进行数据的通信 可以将建立连接之后的socket实例看作是一个pipe,数据流通过这个pipe交换 (4)关闭相关资源 4.客户端的实现 (1)创建Socket对象,指明需要连接的服务器地址和端口号 这是和服务器端是对应的 (2)当创建Socket对象实例时,就已经向服务器端发送了连接请求。 服务器端accept()会监听并接受请求(如果地址端口一致),这就建立了连接,客户端通过输出流来发送数据 这一步其实相当于向socket这个管道中发送数据 (3)关闭相关资源 5.服务器端代码 // 1.创建SeverSocket,指定端口 ServerSocket serverSocket = new ServerSocket(8888); // 2.调用accept()方法监听,等待客户端的连接 Socket socket = serverSocket.accept();//阻塞等待,连接成功后返回一个socket实例 // 3.输入输出流 InputStream is = socket.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is));//字节流转换成字符流,并添加缓冲 while((info=br.readLine())==null){ System.out.println(info); } socket.shutdownInput(); br.close(); is.close(); socket.close(); serverSocket.close();查看全部
举报
0/150
提交
取消