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 }

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

            

  • 相关阅读:
    多个类定义attr属性重复的问题:Attribute "xxx" has already been defined
    好用的批量改名工具——文件批量改名工具V2.0 绿色版
    得到ImageView中drawable显示的区域的计算方法
    得到view坐标的各种方法
    实现类似于QQ空间相册的点击图片放大,再点后缩小回原来位置
    Material Designer的低版本兼容实现(五)—— ActivityOptionsCompat
    Android 自带图标库 android.R.drawable
    解决 Attempting to destroy the window while drawing!
    解决Using 1.7 requires compiling with Android 4.4 (KitKat); currently using API 4
    Material Designer的低版本兼容实现(四)—— ToolBar
  • 原文地址:https://www.cnblogs.com/zjm1999/p/10165728.html
Copyright © 2011-2022 走看看