美文网首页
Java学习5-socket通信(2)

Java学习5-socket通信(2)

作者: 持之以蘅 | 来源:发表于2019-06-22 21:04 被阅读0次
  • 基于TCP协议的socket通信
  • 目标:了解概念,通信模型,实现socket的步骤,服务端和客户端应该做些什么

什么是scoket

  • 套接字,用来描述IP地址和端口(上篇已经提到过),通信链的句柄;应用程序通过其向网络发送请求或者应答网络请求;包含进行网络通信所必须的五种信息:连接所是哟个的协议;本机的IP地址;本地远程的协议端口;远地主机的IP地址以及远地进程的协议端口。

通信模型

image.png
实现步骤
  • 创建 server socket 和socket
  • 打开连接到的socket的输入/输出流
  • 按照协议对socket进行读/写操作
  • 关闭输入输出流,以及socket

服务端设计

好像找到我要用的地方了,服务端

步骤
  • 创建server socket对象,绑定监听得端口
  • 调用accept()方法监听客户端的请求
  • 连接建立后,通过输入流读取客户端发送的请求信息
  • 通过输出流向客户端发送响应信息
  • 关闭相关资源
public class SocketServer {
    public static void main(String[] args) throws IOException {
        //1.创建一个服务器端Socket,即ServerSocket,指定绑定的端口,并监听此端口
        ServerSocket serverSocket = new ServerSocket(12345);
        InetAddress address = InetAddress.getLocalHost();
        String ip = address.getHostAddress();
        Socket socket = null;
        //2.调用accept()等待客户端连接
        System.out.println("~~~服务端已就绪,等待客户端接入~,服务端ip地址: " + ip);
        socket = serverSocket.accept();
        //3.连接后获取输入流,读取客户端信息
        InputStream is=null;
        InputStreamReader isr=null;
        BufferedReader br=null;
        OutputStream os=null;
        PrintWriter pw=null;
        is = socket.getInputStream();     //获取输入流
        isr = new InputStreamReader(is,"UTF-8");
        br = new BufferedReader(isr);
        String info = null;
        while((info=br.readLine())!=null){//循环读取客户端的信息
            System.out.println("客户端发送过来的信息" + info);
        }
        socket.shutdownInput();//关闭输入流
        socket.close();
    }
}
  • 显示有问题
    原因还未找到
    image.png

客户端设计

  • 创建socket对象,指明需要链接的服务器的地址和端号
  • 链接建立后,通过输出流向服务器发送请求信息
  • 通过输出流获取服务器响应的信息
  • 关闭相关资源
public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button btn_accept = (Button) findViewById(R.id.btn_accept);
        btn_accept.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        new Thread() {
            @Override
            public void run() {
                try {
                    acceptServer();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }.start();
    }

    private void acceptServer() throws IOException {
        //1.创建客户端Socket,指定服务器地址和端口
        Socket socket = new Socket("172.16.2.54", 12345);
        //2.获取输出流,向服务器端发送信息
        OutputStream os = socket.getOutputStream();//字节输出流
        PrintWriter pw = new PrintWriter(os);//将输出流包装为打印流
        //获取客户端的IP地址
        InetAddress address = InetAddress.getLocalHost();
        String ip = address.getHostAddress();
        pw.write("客户端:~" + ip + "~ 接入服务器!!");
        pw.flush();
        socket.shutdownOutput();//关闭输出流
        socket.close();
    }
}
  • 结果好像依旧不行先放在这里吧

相关文章

网友评论

      本文标题:Java学习5-socket通信(2)

      本文链接:https://www.haomeiwen.com/subject/llnvqctx.html