以前写过一个局域网通信工具,很简单的。但是这系列文章是用来解决新手问题的。所以打算写个最简单的demo。
废话少说,先来个基于TCP的。
上server端代码:
import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; public class MyServiceSocket { public static void main(String[] args) { try { // 1.建立一个服务器socket对象 ServerSocket ss = new ServerSocket(8888); // 2.等待客户端连接 Socket s = ss.accept();// 等到客户端连接 // 通过输入输出流操作数据 InputStream is = s.getInputStream(); DataInputStream dis = new DataInputStream(is); System.out.println(dis.readUTF()); OutputStream out = s.getOutputStream(); DataOutputStream dos = new DataOutputStream(out); dos.writeUTF("hello client!"); // 4.关闭数据流 dis.close(); is.close(); s.close(); ss.close(); } catch (Exception e) { e.printStackTrace(); } } }
客户端代码:
import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; public class MyClient { public MyClient() { } public static void main(String[] args) { try { // 1.建立Socket对象 Socket client = new Socket("localhost", 8888); // 2.通过socket对象的输入输出流操作数据 OutputStream out = client.getOutputStream(); DataOutputStream dos = new DataOutputStream(out); dos.writeUTF("hello service!"); InputStream is = client.getInputStream(); DataInputStream dis = new DataInputStream(is); System.out.println(dis.readUTF()); System.out.println(client.getInetAddress()); System.out.println(client.getLocalPort()); System.out.println(client.getLocalSocketAddress()); System.out.println(client.getChannel()); // 3.关闭连接 dos.close(); out.close(); client.close(); } catch (Exception e) { e.printStackTrace(); } } }
再来一个基于UDP的。
server端代码:
import java.net.DatagramPacket; import java.net.DatagramSocket; public class MyUDPServer { public static void main(String[] args) { byte b[] = new byte[100]; try { DatagramPacket dp = new DatagramPacket(b, b.length); DatagramSocket ds = new DatagramSocket(8888); ds.receive(dp); String s = "你发的数据是:" + new String(b).trim(); System.out.println(s); dp = new DatagramPacket(s.getBytes(), s.getBytes().length, dp.getAddress(), dp.getPort()); ds = new DatagramSocket(); ds.send(dp); } catch (Exception e) { e.printStackTrace(); } } }
import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; /** * 类说明:UDP数据包 udp 总结 1.将要发的数据先进行打包 使用的类是:DatagramPacket 2.发送打包好的数据 * 使用的类是:DatagramSocket (发送数据包) 注意事项:发送数据报是要知道目的地和目的端口号 * 所以要采用DatagramPacket(byte[] buf, int length,InetAddress address,int port) * 因为发送的时候已经知道端口号 故发送DatagramSocket()不需要再写参数了 * * 接收数据包: 1.接收的时候要将接受的数据打包DatagramPacket(byte[] buf, int length) * 2.接收的时候要知道重那个端口接收 故使用的时候要DatagramSocket(int prot); * */ public class MyUDPClient { public static void main(String[] args) { byte b[] = "hello udp server!".getBytes(); try { InetAddress add = InetAddress.getByName("localhost"); DatagramPacket dp = new DatagramPacket(b, b.length, add, 8888); DatagramSocket ds = new DatagramSocket(); ds.send(dp); b = new byte[100]; dp = new DatagramPacket(b, b.length); ds.receive(dp); System.out.println(new String(b).trim()); } catch (Exception e) { e.printStackTrace(); } } }