package JavaSE.SocketDemo; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; /** * ClassName: ServerDemo * Company:华中科技大学电气学院 * date: 2019/7/13 15:46 * author: YEXIN * version: 1.0 * since: JDK 1.8 * Description:服务端程序 */ public class ServerDemo { public static void main(String[] args) throws IOException { //启动一个socket服务端【本质就是向操作系统注册一个端口号,用来监听数据】 ServerSocket ss = new ServerSocket(10000); System.out.println("Server is strating......"); //监听这个端口上的消息 //等待并接受客户端的消息,建立socket连接(sc,将两者的通信信息都封装在sc里);这是一个阻塞方法【一直等待消息到来】,否则不会退出 Socket sc = ss.accept(); //从连接接受数据,需要先获得一个输入流工具 InputStream in = sc.getInputStream(); /** * (1)一种写法 */ // int read = 0; // // while ((read = in.read() )!= -1){ // //从输入流中拿数据 // //read也是阻塞的,没有读到数据就会一直在此等待 // System.out.println((char)read); // } /** * (2) */ byte[] b = new byte[1024]; int num = in.read(b); String string = new String(b,0,num);//将网络流读到b数组中。 System.out.println("收到客户端数据:"+string); //发送数据: OutputStream out = sc.getOutputStream(); out.write("我是victory".getBytes()); out.close(); in.close(); sc.close(); } }
======================================================================================
package JavaSE.SocketDemo; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; /** * ClassName: ClientDemo * Company:华中科技大学电气学院 * date: 2019/7/13 17:09 * author: YEXIN * version: 1.0 * since: JDK 1.8 * Description:客户端:向服务端发出建立连接的请求 */ public class ClientDemo { public static void main(String[] args) throws IOException { //向服务端发出建立连接的请求,如果连接建立好了,就会返回一个连接对象 Socket sc = new Socket("127.0.0.1",10000); //从连接拿到一个发送数据的工具 OutputStream out = sc.getOutputStream(); //利用out流发送数据 out.write("你是谁?".getBytes()); //接受服务端的数据 InputStream in = sc.getInputStream(); byte[] b = new byte[1024]; int num = in.read(b);//返回读取的字节数 System.out.println(new String(b,0,num)); in.close(); out.close(); sc.close(); } }