zoukankan      html  css  js  c++  java
  • 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 }

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

            

  • 相关阅读:
    ES6_函数方法
    Node_初步了解(3)回调,作用域,上下文
    ES6_入门(4)_数组的解构赋值
    ES6_入门(3)_顶层对象属性
    ES6_入门(2)_const命令
    ES6_入门(1)_let命令
    Node_初步了解(2)
    Node_初步了解(1)
    树的基本知识
    JS_高程5.引用类型(6)Array类型的位置方法,迭代方法,归并方法
  • 原文地址:https://www.cnblogs.com/zjm1999/p/10165728.html
Copyright © 2011-2022 走看看