zoukankan      html  css  js  c++  java
  • Java socket2

    通过socket对象可以获取通信对方的socket信息

    客户端:

    import java.net.*;
    import java.io.*;
    
    public class TestServer {
        public static void main(String[] args) {
            try {
                ServerSocket s = new ServerSocket(8888);
                while(true) {
                    Socket s1 = s.accept();
                    OutputStream os = s1.getOutputStream();
                    DataOutputStream dos = new DataOutputStream(os);
                    dos.writeUTF("Hello"+s1.getInetAddress()+"#port"+s1.getPort()+"bye bye");
                    dos.close();
                    s1.close();
                }
            } catch(IOException e) {
                System.out.println("程序运行出错:"+e);
            }
        }
    }

    用户端:

    import java.net.*;
    import java.io.*;
    
    public class TestClient {
        public static void main(String[] args) {
            try {
                Socket s1 = new Socket("192.168.56.1",8888);
                InputStream is = s1.getInputStream();
                DataInputStream dis = new DataInputStream(is);
                System.out.println(dis.readUTF());
                dis.close();
                s1.close();
            } catch(ConnectException connExc) {
                connExc.printStackTrace();
                System.out.println("服务器连接失败!");
            } catch(IOException e) {
                e.printStackTrace();
            }
        }
    }

    结果:    Hello/192.168.56.1#port56660bye bye

    s1.getInetAddress()    这个是拿到ip地址的意思,注意这里拿的是客户端的ip地址。因为这个s1拿的是对面client的ip

    s1.getPort()        拿的是客户端的端口号  (注意,拿到的端口号可不是8888,8888是服务器的端口号,拿到的端口号56660是本身这个客户端连上去显示的端口号,是随机选的。)

    然后我们试一个互相两边都能通话的例子:

    server:

    import java.net.*;
    import java.io.*;
    
    public class TestSocketServer {
        public static void main(String[] args) {
            InputStream in = null;
            OutputStream out = null;
            try {
                ServerSocket ss = new ServerSocket(5888);
                Socket socket = ss.accept();
                in = socket.getInputStream();
                out = socket.getOutputStream();
                DataOutputStream dos = new DataOutputStream(out);
                DataInputStream dis = new DataInputStream(in);
                String s = null ;
                if((s = dis.readUTF())!=null) {
                    System.out.println(s);
                    System.out.println("from"+socket.getInetAddress());
                    System.out.println("port"+socket.getPort());
                }
            dos.writeUTF("hi,fuck you ");
            dis.close();
            dos.close();
            socket.close();
            } catch(IOException e) {
                e.printStackTrace();
            }
        }
    }

    client:

    import java.net.*;
    import java.io.*;
    
    public class TestSocketClient {
        public static void main(String[] args) {
            InputStream is = null;
            OutputStream os = null;
            try {
                Socket socket = new Socket("localhost",5888);
                is = socket.getInputStream();
                os = socket.getOutputStream();
                DataInputStream dis = new DataInputStream(is);
                DataOutputStream dos = new DataOutputStream(os);
                dos.writeUTF("ok!yes you are right!");
                String s = null;
                if((s = dis.readUTF())!=null) {
                    System.out.println(s);
                }
                dos.close();
                dis.close();
                socket.close();
            } catch(UnknownHostException e) {
                e.printStackTrace();
            } catch(IOException e) {
                e.printStackTrace();
            }
        }
    }

    必须是一个先读,一个先写。要是两个都先写,就会两个都卡在那。因为这个readUTF()是堵塞式的。不然就会死死地卡在那。

  • 相关阅读:
    算法详解(LCA&RMQ&tarjan)补坑啦!完结撒花(。◕ˇ∀ˇ◕)
    借教室(NOIP2012)
    同余方程(NOIP2012)
    开车旅行(NOIP2012)
    剑指offer-int类型负数补码中1的个数-位操作
    直接插入排序的再再改进
    剑指offer-特定二维数组中查找一个元素是否存在-二分搜索-二维数组
    递归的再一次理解-斐波那契数列
    剑指offer-顺时针打印矩阵-二维数组
    剑指offer-第一个只出现一次的字符-字符串和数组
  • 原文地址:https://www.cnblogs.com/wangshen31/p/7445938.html
Copyright © 2011-2022 走看看