TCPSocket系列二
一.单向服务器端写出及单向客户端读入
服务器端:
1 import java.io.DataOutputStream; 2 import java.io.IOException; 3 import java.io.OutputStream; 4 import java.net.ServerSocket; 5 import java.net.Socket; 6 /** 7 * 一.单边服务器客户端写出和读取 8 * public abstract class OutputStream extends Object 9 * implements Closeable, Flushable 10 * 这个抽象类是表示字节输出流的所有类的超类。 输出流接收输出字节并将其发送到某个接收器。 11 * 12 * 二.public int getPort()返回此套接字连接到的远程端口号。 13 * 14 * 三.public InetAddress getInetAddress()返回套接字所连接的地址。 15 */ 16 public class TestServer { 17 public static void main(String[] args) { 18 try { 19 //服务器连接端口 20 ServerSocket ss=new ServerSocket(8888); 21 while(true){ 22 //连接插口 23 Socket s=ss.accept(); 24 //通过插口写出数据 25 OutputStream out=s.getOutputStream(); 26 //包装一层数据流管道 27 DataOutputStream dat=new DataOutputStream(out); 28 //以UTF的形式写出 29 dat.writeUTF("俱怀逸兴壮思飞,"+s.getInetAddress()+ 30 "欲上青天揽明月"+s.getPort()+"人生得意须尽欢"); 31 //关闭数据流,关闭插口 32 dat.close(); s.close(); 33 } 34 } catch (IOException e) { 35 e.printStackTrace(); 36 System.out.println("程序运行异常!"); 37 } 38 39 } 40 }
客户端:
1 import java.io.DataInputStream; 2 import java.io.IOException; 3 import java.io.InputStream; 4 import java.net.ConnectException; 5 import java.net.Socket; 6 import java.net.UnknownHostException; 7 8 /** 9 * 客户端单向读取 10 */ 11 public class TestClient { 12 public static void main(String[] args) { 13 try { 14 //确定客户端端口及服务器连接端口 15 Socket s=new Socket("127.0.0.1",8888); 16 //读取服务器端发送的数据 17 InputStream in=s.getInputStream(); 18 DataInputStream dat=new DataInputStream(in); 19 //以UTF的形式读取 20 System.out.println(dat.readUTF()); 21 //关闭流和插口 22 dat.close(); s.close(); 23 } catch (ConnectException con) { 24 con.printStackTrace(); 25 System.out.println("服务器连接失败!"); 26 } catch (IOException e) { 27 e.printStackTrace(); 28 } 29 } 30 }
二.双向向服务器端写出及单向客户端读入
服务器端:
1 /** 2 * 双向写出写入服务器端 3 */ 4 import java.io.DataInputStream; 5 import java.io.DataOutputStream; 6 import java.io.IOException; 7 import java.io.InputStream; 8 import java.io.OutputStream; 9 import java.net.ServerSocket; 10 import java.net.Socket; 11 12 public class TestSockServer { 13 public static void main(String[] args) { 14 //输入流 15 InputStream in=null; 16 //输出流 17 OutputStream out=null; 18 try { 19 //服务器端监听端口 20 ServerSocket ss=new ServerSocket(5888); 21 //接受连接 22 Socket socket=ss.accept(); 23 //插口获得输入和输出管道 24 in=socket.getInputStream(); 25 out=socket.getOutputStream(); 26 //输出管道包装输出和输入流 27 DataOutputStream dos=new DataOutputStream(out); 28 DataInputStream dis=new DataInputStream(in); 29 String s=null; 30 if((s=dis.readUTF())!=null) {//先读入后写出 31 System.out.println(s); 32 //输出客户端ip地址 33 System.out.println("from: "+socket.getInetAddress()); 34 //输出客户端端口 35 System.out.println("port: "+socket.getPort()); 36 } 37 dos.writeUTF("我是最棒哒!"); 38 //关闭流与插口 39 dis.close(); dos.close(); socket.close(); 40 } catch (IOException e) { 41 e.printStackTrace(); 42 } 43 } 44 }
客户端:
1 /** 2 * 双向写出读入客户端 3 */ 4 import java.io.DataInputStream; 5 import java.io.DataOutputStream; 6 import java.io.IOException; 7 import java.io.InputStream; 8 import java.io.OutputStream; 9 import java.net.Socket; 10 import java.net.UnknownHostException; 11 12 public class TestSockClient { 13 public static void main(String[] args) { 14 //建立输入输出流 15 InputStream is=null; OutputStream out=null; 16 try {//创建插口 17 Socket socket=new Socket("127.0.0.1",5888); 18 //插口获得流管道 19 is=socket.getInputStream(); 20 out=socket.getOutputStream(); 21 //数据流管道包装 22 DataInputStream dis=new DataInputStream(is); 23 DataOutputStream dos=new DataOutputStream(out); 24 //先写出后读入 25 dos.writeUTF("hey"); 26 String s=null; 27 if((s=dis.readUTF())!=null) { 28 System.out.println(s); 29 //关闭流和插口 30 dos.close(); dis.close(); socket.close(); 31 } 32 } catch (UnknownHostException e) { 33 e.printStackTrace(); 34 } catch (IOException e) { 35 e.printStackTrace(); 36 } 37 } 38 }
先开启服务器端,再开启客户端: