首页 > 应用开发 > Java > Java网络编程和NIO详解1:JAVA 中原生的 socket 通信机制
import java.net.InetSocketAddress; import java.net.Socket; import java.net.SocketAddress; // 初始化 socket Socket socket = new Socket(); // 初始化远程连接地址 SocketAddress remote = new InetSocketAddress(host, port); // 建立连接 socket.connect(remote);
// 输入流 InputStream in = socket.getInputStream(); // 输出流 OutputStream out = socket.getOutputStream();
// 获取 socket 输入流 private BufferedReader getReader(Socket socket) throws IOException { InputStream in = socket.getInputStream(); return new BufferedReader(new InputStreamReader(in)); } // 获取 socket 输出流 private PrintWriter getWriter(Socket socket) throws IOException { OutputStream out = socket.getOutputStream(); return new PrintWriter(new OutputStreamWriter(out)); }
public class HttpUtil { public static String compositeRequest(String host){ return "GET / HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "User-Agent: curl/7.43.0\r\n" + "Accept: */*\r\n\r\n"; } }
// 发起请求 PrintWriter writer = getWriter(socket); writer.write(HttpUtil.compositeRequest(host)); writer.flush();
// 读取响应 String msg; BufferedReader reader = getReader(socket); while ((msg = reader.readLine()) != null){ System.out.println(msg); }
public class Application { public static void main(String[] args) { new SocketHttpClient().start("www.baidu.com", 80); } }
public class SingleThreadApplication { public static void main(String[] args) { // HttpConstant.HOSTS 为 站点集合 for (String host: HttpConstant.HOSTS) { new SocketHttpClient().start(host, HttpConstant.PORT); } } }
public class ThreadPoolApplication { public static void main(String[] args) { ExecutorService executorService = Executors.newFixedThreadPool(8); for (final String host: HttpConstant.HOSTS) { Thread t = new Thread(new Runnable() { public void run() { new SocketHttpClient().start(host, HttpConstant.PORT); } }); executorService.submit(t); new SocketHttpClient().start(host, HttpConstant.PORT); } } }
public class TCP客户端 { public static void main(String[] args) { new Thread(new Runnable() { @Override public void run() { try { Socket s = new Socket("127.0.0.1",1234); //构建IO InputStream is = s.getInputStream(); OutputStream os = s.getOutputStream(); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os)); //向服务器端发送一条消息 bw.write("测试客户端和服务器通信,服务器接收到消息返回到客户端\n"); bw.flush(); //读取服务器返回的消息 BufferedReader br = new BufferedReader(new InputStreamReader(is)); String mess = br.readLine(); System._out_.println("服务器:"+mess); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }).start(); } }
public class TCP服务端 { public static void main(String[] args) { new Thread(new Runnable() { @Override public void run() { try { ServerSocket ss = new ServerSocket(1234); while (true) { System._out_.println("启动服务器...."); Socket s = ss.accept(); System._out_.println("客户端:" + s.getInetAddress().getLocalHost() + "已连接到服务器"); BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream())); //读取客户端发送来的消息 String mess = br.readLine(); System._out_.println("客户端:" + mess); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); bw.write(mess + "\n"); bw.flush(); } } catch (IOException e) { e.printStackTrace(); } } }).start(); } }
public class UDP客户端 { public static void main(String[] args) { new Thread(new Runnable() { @Override public void run() { byte []arr = "Hello Server".getBytes(); try { InetAddress inetAddress = InetAddress.getLocalHost(); DatagramSocket datagramSocket = new DatagramSocket(); DatagramPacket datagramPacket = new DatagramPacket(arr, arr.length, inetAddress, 1234); datagramSocket.send(datagramPacket); System._out_.println("send end"); } catch (UnknownHostException e) { e.printStackTrace(); } catch (SocketException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }).start(); } }
public class UDP服务端 { public static void main(String[] args) { new Thread(new Runnable() { @Override public void run() { try { DatagramSocket datagramSocket = new DatagramSocket(1234); byte[] buffer = new byte[1024]; DatagramPacket packet = new DatagramPacket(buffer, buffer.length); datagramSocket.receive(packet); System._out_.println("server recv"); String msg = new String(packet.getData(), "utf-8"); System._out_.println(msg); } catch (SocketException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }).start(); } }
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69951287/viewspace-2663592/ ,如需转载,请注明出处,否则将追究法律责任。
注册时间:2019-10-19