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()是堵塞式的。不然就会死死地卡在那。

转载于:https://www.cnblogs.com/wangshen31/p/7445938.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值