zoukankan      html  css  js  c++  java
  • 关于socket

    以前学习网络编程方面的知识,网络编程课也是随随便便就过去了,并没有学习这门课的内容。闲的时候也有想过如何在eclipse平台用Java写一个类似于qq的网络通讯工具,这个星期也有所实践。

    public class ServerMain {
    public static void main(String args[]) {
    ServerMain sm=new ServerMain();
    sm.open();
    }

    private void open() {
    // 在8000端口号上创建服务器端口,8000端口号可能被占
    try {
    ServerSocket ss=new ServerSocket(8000);
    while(true){
    Socket s=ss.accept();//服务器在8000端口 {等待}接受连进来的客户端,连进来的客户端s。
    //若没有客户端连接服务器,这行代码不往下执行 处于阻塞状态

    ToClient fs=new ToClient(s);
    fs.start();
    }
    } catch (IOException e) { //可能有输出输出异常,端口占用无法输入输出
    //e.printStackTrace();//打印栈,打印e中的所有异常描述
    System.out.println("端口号被占用");
    }//电脑无程序2000端口,一般选5000端口以上
    }

    }

    public class ToClient extends Thread{
    public Socket s;
    public ToClient() {
    // TODO Auto-generated constructor stub
    }
    public ToClient(Socket s) {
    this.s=s;
    }
    @Override
    public void run() {
    // TODO Auto-generated method stub
    try {
    /*
    * 在连进来的客户端上得到从服务器到客户端的名叫out的数据输出流
    */
    OutputStream out =s.getOutputStream();//客户端可能突然关闭,服务区数据流无法输出
    while(true){
    out.write("你好,客户端。 ".getBytes());//把这句话转换成01编码,通过out写出
    out.flush();//强制把out流中的数据刷出到客户端
    }
    } catch (IOException e) {
    // TODO Auto-generated catch block
    //e.printStackTrace();
    System.out.println("用户下线");
    }
    }
    }

    这个是我写的两个个应用服务器的类,刚开始看网上类似的代码的时候,总是很难理解其中的socket,一会服务器,一会又是客户端,后来查阅了相关资料:

    服务器根据地址类型(ipv4,ipv6)、socket类型、协议创建socket

    服务器为socket绑定ip地址和端口号

    服务器socket监听端口号请求,随时准备接收客户端发来的连接,这时候服务器的socket并没有被打开

    客户端创建socket

    客户端打开socket,根据服务器ip地址和端口号试图连接服务器socket

    服务器socket接收到客户端socket请求,被动打开,开始接收客户端请求,直到客户端返回连接信息。这时候socket进入阻塞状态,所谓阻塞即accept()方法一直到客户端返回连接信息后才返回,开始接收下一个客户端谅解请求

    客户端连接成功,向服务器发送连接状态信息

    服务器accept方法返回,连接成功

    客户端向socket写入信息

    服务器读取信息

    客户端关闭

    服务器端关闭

  • 相关阅读:
    html bottom html submit按钮表单控件与CSS美化
    Extjs4.0以上版本智能提示的方法
    Delete from join 用法
    vs2015开发Windows服务
    -bash: Chmod: command not found
    使用OpenPop.dll开发读取POP3邮件程序
    邮箱学堂:SPF详解
    js中escape对应的C#解码函数 UrlDecode
    json字符串CSS格式化
    Sql server not in优化
  • 原文地址:https://www.cnblogs.com/shuqin233/p/5372425.html
Copyright © 2011-2022 走看看