资讯详情

资讯详情

java学习笔记(二十)——网络编程

文章目录基本的通信架构CSBS网络通信三要素IP地址端口号协议传输层的两个通信协议(UDP和TCP)CSUDP通信TCP通信CS架构(群聊)BS基本的通信架构CSBS网络通信三要素IP地址IP地址的代表类是谁InetAddress类如何获取本机IP对象public static InetAddress getLocalHost()如何判断与该IP地址对象是否互通public boolean isReachable(int timeout)端口号唯一标识正在计算机设备上运行的进程程序协议传输层的两个通信协议(UDP和TCP)TCP通信协议的特点是什么样的?它是一种面向连接的可靠通信协议。传输前采用“三次握手”方式建立连接点对点的通信所以可靠。在连接中可进行大数据量的传输。 通信效率较低。UDP协议的特点是什么用户数据报协议(User Datagram Protocol)UDP是面向无连接不可靠传输的通信协议。速度快有大小限制一次最多发送64K数据不安全易丢失数据CSUDP通信客户端服务端TCP通信客户端TCP通信客户端的代表类是谁Socket类public Socket(String host , int port)TCP通信如何使用Socket管道发送、接收数据 ?OutputStream getOutputStream()获得字节输出流对象发InputStream getInputStream()获得字节输入流对象收服务端服务端实现步骤创建ServerSocket对象注册服务端端口。调用ServerSocket对象的accept()方法等待客户端的连接并得到Socket管道对象。通过Socket对象调用getInputStream()方法得到字节输入流、完成数据的接收。释放资源关闭socket管道CS架构(群聊)端口转发Clientpackage TCP; import java.io.DataOutputStream; import java.io.IOException; import java.io.OutputStream; import java.net.*; import java.util.Scanner; public class Client { static void main() throws IOException { InetAddress ip1InetAddress.getLocalHost(); System.out.println(ip1); Socket socketnew Socket(ip1,8888); Scanner scnew Scanner(System.in); OutputStream ossocket.getOutputStream(); DataOutputStream dosnew DataOutputStream(os); new ClientReader_Thread(socket).start(); while (true) { String msgsc.nextLine(); if(msg.equals(exit)){ System.out.println(退出了客户端欢迎下次光临); break; } dos.writeUTF(msg); } dos.close(); socket.close(); } }ClientReaderpackage TCP; import java.io.DataInputStream; import java.io.IOException; import java.io.InputStream; import java.net.Socket; public class ClientReader_Thread extends Thread{ private Socket socket; public ClientReader_Thread(Socket socket){ this.socketsocket; } Override public void run() { InputStream is null; try { is socket.getInputStream(); } catch (IOException e) { throw new RuntimeException(e); } DataInputStream dis new DataInputStream(is); while (true) { try { String msg dis.readUTF(); System.out.println(msg); System.out.println(————————————); } catch (IOException e) { System.out.println(自己下线了socket.getRemoteSocketAddress()); break; } } } }Serverpackage TCP; import java.io.DataInputStream; import java.io.IOException; import java.io.InputStream; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; public class Server { public static ArrayListSocket onlineSocketsnew ArrayList(); static void main() throws IOException { System.out.println(服务端已启动); ServerSocket serverSocket new ServerSocket(8888); while (true) { Socket socketserverSocket.accept(); onlineSockets.add(socket); System.out.println(有人上线了socket.getRemoteSocketAddress()); SeverReader_Thread threadnew SeverReader_Thread(socket); thread.start(); } } }ServerReaderpackage TCP; import java.io.*; import java.net.Socket; public class SeverReader_Thread extends Thread{ private Socket socket; public SeverReader_Thread(Socket socket){ this.socketsocket; } Override public void run() { InputStream is null; try { is socket.getInputStream(); } catch (IOException e) { throw new RuntimeException(e); } DataInputStream dis new DataInputStream(is); while (true) { try { String msg dis.readUTF(); System.out.println(msg); sendToall(msg); System.out.println(————————————); } catch (IOException e) { System.out.println(有人下线了socket.getRemoteSocketAddress()); Server.onlineSockets.remove(socket); break; } } } private void sendToall(String msg) throws IOException { for (Socket onlineSocket : Server.onlineSockets) { OutputStream osonlineSocket.getOutputStream(); DataOutputStream dosnew DataOutputStream(os); dos.writeUTF(msg); dos.flush(); } } }BSpackage BS; import java.io.DataOutputStream; import java.io.IOException; import java.io.OutputStream; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; import java.net.UnknownHostException; public class Server { static void main() throws IOException { InetAddress ip1InetAddress.getLocalHost(); System.out.println(ip1); ServerSocket serverSocketnew ServerSocket(1145); while (true) { Socket socketserverSocket.accept(); System.out.println(socket.getRemoteSocketAddress()); new ServerReader_Thread(socket).start(); } } }package BS; import java.io.DataOutputStream; import java.io.IOException; import java.io.OutputStream; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; public class ServerReader_Thread extends Thread{ Socket socketnew Socket(); public ServerReader_Thread(Socket socket){ this.socketsocket; } Override public void run(){ OutputStream os null; try { os socket.getOutputStream(); } catch (IOException e) { throw new RuntimeException(e); } PrintWriter printWriternew PrintWriter(os); printWriter.println(HTTP/1.1 200 OK); printWriter.println(Content-Type: text/html; charsetUTF-8); printWriter.println(); printWriter.println(div王顺喜欢玩galgamediv); printWriter.flush(); try { socket.close(); } catch (IOException e) { throw new RuntimeException(e); } } }
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →