无连接通信 UDP
客户端
package com.swift.test; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.util.Scanner; /*使用UDP通信编写一个Java程序.要求:获取键盘输入的内容.发送到服务端.服务端接收后.在控制台上打印接收到的内容 客戶端 1.创建键盘录入对象.获取键盘录入数据 2.创建DatagramSocket对象 3.创建DatagramPacket对象.并封装键盘录入的数据 4.发送数据 5.释放流资源 服務端 1.创建DatagramSocket对象 2.创建DatagramPacket对象 3.接收数据存储到DatagramPacket对象中 4.获取DatagramPacket对象的内容 5.在控制台上打印接收到的内容 6.释放流资源 */ public class DemoUDPClient { public static void main(String[] args) throws IOException { Scanner scan=new Scanner(System.in); System.out.println("请输入要传达的内容:"); String str=scan.nextLine(); DatagramSocket datagramSocket=new DatagramSocket(); byte[] buf=str.getBytes(); DatagramPacket datagramPacket=new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.105.22"),6464); datagramSocket.send(datagramPacket); datagramSocket.close(); } }
服务端
package com.swift.test; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; /*使用UDP通信编写一个Java程序.要求:获取键盘输入的内容.发送到服务端.服务端接收后.在控制台上打印接收到的内容 客戶端 1.创建键盘录入对象.获取键盘录入数据 2.创建DatagramSocket对象 3.创建DatagramPacket对象.并封装键盘录入的数据 4.发送数据 5.释放流资源 服務端 1.创建DatagramSocket对象 2.创建DatagramPacket对象 3.接收数据存储到DatagramPacket对象中 4.获取DatagramPacket对象的内容 5.在控制台上打印接收到的内容 6.释放流资源 */ public class DemoUDPServer { public static void main(String[] args) throws IOException { DatagramSocket datagramSocket=new DatagramSocket(6464); InetAddress ip=InetAddress.getLocalHost(); String ipString=ip.getHostAddress(); String nameString=ip.getHostName(); System.out.println(ipString+" "+nameString); byte[] buf=new byte[1024]; DatagramPacket datagramPacket=new DatagramPacket(buf,1024); datagramSocket.receive(datagramPacket); System.out.println(new String(buf)); datagramSocket.close(); } }
结果
有连接通信TCP
客户端
package com.swift.test; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.InetAddress; import java.net.Socket; /*使用socket编写一个Java程序,要求:客户端发送内容“我是客户端”到服务端,服务端接收后,在控制台上打印接收到的内容,并返回内容“我来自服务端”到客户端,客户端接收服务端的发送的内容后将接收内容打印在控制台 客户端 1.创建客户端的Socket对象 2.获取Socket的输出流对象 3.写数据给服务器 4.获取Socket的输入流对象 5.使用输入流,读反馈信息 6.关闭流资源 */ public class DemoTCPClient { public static void main(String[] args) throws IOException { Socket s=new Socket(InetAddress.getByName("10.254.3.116"),8888); OutputStream out=s.getOutputStream(); byte[] buf="我是客户端".getBytes(); out.write(buf); InputStream in=s.getInputStream(); byte[] bytes=new byte[128]; in.read(bytes); System.out.println(new String(bytes));
s.close(); } }
服务端
package com.swift.test; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; /*使用socket编写一个Java程序,要求:客户端发送内容“我是客户端”到服务端,服务端接收后,在控制台上打印接收到的内容,并返回内容“我来自服务端”到客户端,客户端接收服务端的发送的内容后将接收内容打印在控制台 服务器端 1.创建服务器端ServerSocket对象,指定服务器端端口号 2.开启服务器,等待着客户端Socket对象的连接,如有客户端连接,返回客户端的Socket对象 3.通过客户端的Socket对象,获取客户端的输入流,为了实现获取客户端发来的数据 4.通过客户端的输入流,获取流中的数据 5.通过客户端的Socket对象,获取客户端的输出流,为了实现给客户端反馈信息 6.通过客户端的输出流,写数据到流中 7.关闭流资源*/ public class DemoTCPServer { public static void main(String[] args) throws IOException { ServerSocket serverSocket=new ServerSocket(8888); InetAddress ip=InetAddress.getLocalHost(); System.out.println(ip.getHostAddress()); Socket s=serverSocket.accept(); InputStream in=s.getInputStream(); byte[] buf=new byte[128]; in.read(buf); System.out.println(new String(buf)); OutputStream out=s.getOutputStream(); out.write("我来自服务端".getBytes());
serverSocket.close();
s.close();
} }
多线程TCP
客户端
package com.swift.test; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.InetAddress; import java.net.Socket; /*使用socket编写一个Java程序,要求:客户端发送内容“我是客户端”到服务端,服务端接收后,在控制台上打印接收到的内容,并返回内容“我来自服务端”到客户端,客户端接收服务端的发送的内容后将接收内容打印在控制台 客户端 1.创建客户端的Socket对象 2.获取Socket的输出流对象 3.写数据给服务器 4.获取Socket的输入流对象 5.使用输入流,读反馈信息 6.关闭流资源 */ public class DemoTCPClient implements Runnable{ @Override public void run() { Socket s = null; try { s=new Socket(InetAddress.getByName("10.254.3.116"),8888); OutputStream out=s.getOutputStream(); byte[] buf=("I am Client."+InetAddress.getLocalHost().getHostName()).getBytes(); out.write(buf); InputStream in=s.getInputStream(); byte[] bytes=new byte[128]; in.read(bytes); System.out.println(new String(bytes)); } catch(Exception e){ e.printStackTrace(); } finally { try { s.close(); } catch (IOException e) { e.printStackTrace(); } } } }
服务端
package com.swift.test; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; /*使用socket编写一个Java程序,要求:客户端发送内容“我是客户端”到服务端,服务端接收后,在控制台上打印接收到的内容,并返回内容“我来自服务端”到客户端,客户端接收服务端的发送的内容后将接收内容打印在控制台 服务器端 1.创建服务器端ServerSocket对象,指定服务器端端口号 2.开启服务器,等待着客户端Socket对象的连接,如有客户端连接,返回客户端的Socket对象 3.通过客户端的Socket对象,获取客户端的输入流,为了实现获取客户端发来的数据 4.通过客户端的输入流,获取流中的数据 5.通过客户端的Socket对象,获取客户端的输出流,为了实现给客户端反馈信息 6.通过客户端的输出流,写数据到流中 7.关闭流资源*/ public class DemoTCPServer { public static void main(String[] args) throws IOException { ServerSocket serverSocket = new ServerSocket(8888); InetAddress ip = InetAddress.getLocalHost(); System.out.println(ip.getHostAddress()); while (true) { Socket s = serverSocket.accept(); InputStream in = s.getInputStream(); byte[] buf = new byte[128]; in.read(buf); System.out.println(new String(buf)); OutputStream out = s.getOutputStream(); out.write("I come from Server.".getBytes()); s.close(); } } }
多线程开启多个客户端任务
package com.swift.test; public class DemoTCPTest { public static void main(String[] args) { DemoTCPClient client=new DemoTCPClient(); Thread t1=new Thread(client); Thread t2=new Thread(client); Thread t3=new Thread(client); t1.start(); t2.start(); t3.start(); } }