TCP实现服务器端接收客户端发送过来的消息。
服务器端:
import java.io.IOException; import java.io.InputStream; import java.net.ServerSocket; import java.net.Socket; public class ServerDemo { public static void main(String[] args) throws IOException { /* * 服务端接收客户端发送过来的数据 * 建立TCP服务端 * 1.创建socket服务,通过serverSocket对象(服务端必须对外提供一个端口) * 2.获取连接过来的客户端对象 * 3.通过客户端对象获取socket流,读取客户端发来的数据, * 并打印在控制台上 * 4.关闭资源。关闭客户端,关闭服务器.因为服务器中保存了客户端对象,所以 * 实际上客户端通过服务器通信还是两个客户端进行通信 * */ //1.创建服务器对象 ServerSocket ss=new ServerSocket(10000); //2.获取连接过来的客户端对象 Socket是客户端套接字 Socket s=ss.accept();//阻塞式 //获取客户端的ip地址 String ip=s.getInetAddress().getHostAddress(); //3.通过socket对象获取输入流,要读取客户端发过来的数据 InputStream is=s.getInputStream(); byte[] buf=new byte[1024]; int len=is.read(buf); String str=new String(buf, 0, len); System.out.println(ip+"..."+str); s.close(); ss.close(); } }
客户端:
import java.io.IOException; import java.io.OutputStream; import java.net.InetAddress; import java.net.Socket; import java.net.UnknownHostException; public class ClientDemo { public static void main(String[] args) throws UnknownHostException, IOException { /* * 建立TCP客户端 * 1.创建TCP客户端的socket服务,使用的是socket对象 * 创建对象时明确连接哪个服务器(通过ip与端口号) * 2.如果连接成功,数据传输通道已经建立 * 通道相当于socket流,包括输入流和输出流,这里我们需要的是输出流 * getOutputStream():获取输出流 * 3.使用输出流将数据写出 * 4.关闭资源 */ // 客户端发送到服务器端 //这里面的端口号为指向的服务器的端口号 Socket s=new Socket(InetAddress.getLocalHost(), 10000); //获取socket流中的输出流 OutputStream os=s.getOutputStream(); //使用输出流将指定的数据写出去 os.write("tcp演示,哥们来了...".getBytes());//因为os为字节流 //关闭资源 os.close(); s.close(); } }
注意:先执行服务器端,再执行客户端。
运行结果:
在客户端控制台输出: