注:TCP之间的通信不同于UDP之间的通信,TCP之间的通信是通过socket IO流来实现的。
UDP是通过发送(send)和接收(receive)数据包来 完成通信的。
TCP客户端:
import java.io.IOException; import java.io.OutputStream; import java.net.Socket; import java.net.UnknownHostException; public class TcpClientDemo { public static void main(String[] args) throws UnknownHostException, IOException { /* * tcp客户端的建立 * 思路: * 1.建立tcp客户端服务 * 1.1因为是面向连接的,必须有连接才可以进行通信 * 1.2在创建客户端时,就必须 明确目的的地址和端口。 * 2.一旦连接建立,就有了传输数据的通道。就可以在通道中进行数据传输 * 这个传输其实就是通过流实现的。这个流就是Socket IO流 * 3.只要获取socket io中的写动作就可以把数据写到socket流中发给服务端。 * 4.关闭资源 */ System.out.println("客户端启动......."); //1.创建客户端对象,明确目的地址和端口。 Socket s = new Socket("192.168.17.1",10003); //2.获取socket流中的输出流,将数据发送给服务端 OutputStream out = s.getOutputStream(); //3.通过输出流写数据 out.write("又要注意啦..tcp来了".getBytes()); //4.关闭资源 s.close(); } }
TCP服务端:
import java.io.InputStream; import java.net.ServerSocket; import java.net.Socket; public class TcpServerDemo { public static void main(String[] args) throws Exception { /* * 创建tcp服务器端 * 思路: * 1.创建socket服务器端服务。服务器端为了让客户端可以连接上,必须提供端口,监听一个端口 * 2.获取客户端对象,通过客户端的socket流和对应的客户端进行通信 * 3.获得客户端的socket流的读取流。 * 4.读取数据并显示在服务器端 * 5.关闭资源 */ System.out.println("服务器端启动......"); //1.创建服务器端对象 ServerSocket ss = new ServerSocket(10003); //2.获取客户端对象 Socket s = ss.accept();//阻塞式 String ip = s.getInetAddress().getHostAddress(); System.out.println(ip+"...connected"); //3.通过客户端对象获取socket流的读取里 InputStream in = s.getInputStream(); byte[] buf = new byte[1024]; int len = in.read(buf); String str = new String(buf,0,len); System.out.println(str); s.close();//先把客户端关掉,要不然服务端连接过多的客户端后会死机 ss.close(); } }