package com.yyq; import java.io.IOException; import java.io.OutputStream; import java.net.InetAddress; import java.net.Socket; import java.net.UnknownHostException; /* * tcp传输 * 1,tcp分为客户端和服务端 * 2,客户端对应的对象是socket * 服务器端对性的对象是serversocket */ /* * 客户端 : 该对象socket建立是,就可以去连接指定主机 * 因为tcp是面向连接的,所以在建立socket服务时,就要有 * 服务端存在,并连接成功,形成通路后,再该通道进行数据的传输。 * */ /* * 步骤: 1,创建Socket服务,并指定要连接的主机和端口 */ public class TcpClient { public static void main(String[] args) throws Exception, IOException { //创建客户端的socket程序,指定目的主机和端口 System.out.println(InetAddress.getLocalHost()); Socket s = new Socket(InetAddress.getLocalHost(),12345); // 如果该步成功了,通路就建立了,这时socket流就产生了,这是就可以进行数据的读写了 OutputStream out = s.getOutputStream(); out.write("tcp ge".getBytes()); s.close(); } } package com.yyq; import java.io.IOException; import java.io.InputStream; import java.net.ServerSocket; import java.net.Socket; /* * 存在对应关系 * 需求:定义端点接受数据并打印在控制台上 * 服务端: * 1.建立服务器的socket服务,serversocket * 并监听一个端口 * 2.获取链接过来的客户端对象,通过serversocket的accept方法 * 没有连接就会等,所以这个方法是堵塞式的 * 并打印在控制台 * 3.客户端如果发来数据,那么服务端要使用对应的客户端对象,并获取到 * 该对象的读取流来读取发过来的数据 * 4.关闭客户端(可选) */ public class TcpServer { public static void main(String[] args) throws IOException { ServerSocket ss = new ServerSocket(12345); Socket s = ss.accept(); System.out.println(s.getInetAddress().getHostAddress()+"....connected"); //该源是网络流 有了流对象之后读数据 InputStream in = s.getInputStream(); byte[] buf = new byte[1024]; int len = in.read(buf); System.out.println(new String(buf,0,len)); s.close(); //关闭客户端。一定是服务器关闭客户端 //ss.close(); 关闭服务端 } }