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 }

先开启服务器端,再开启客户端:

        

原文地址:https://www.cnblogs.com/zjm1999/p/10165728.html