本机端口号监听

访问端代码

package socket;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.util.logging.SocketHandler;

public class ClientSocketDemo {

    public static void main(String[] args) {
        String serverName = "localhost";
        int port = 8089;
        try {
            Socket client = new Socket(serverName, port);

            //当客户端连接到服务端后,才会执行以下代码
            System.out.println("客户端已连接到远程主机地址:"+client.getRemoteSocketAddress());

            //向服务端发送消息
            DataOutputStream dos = new DataOutputStream(client.getOutputStream());
            dos.writeUTF("服务端你好,我是客户端,我的地址是: "+client.getLocalSocketAddress());

            //接收来自服务端的消息
            DataInputStream dis = new DataInputStream(client.getInputStream());
            System.out.println("来自于服务端的消息:"+dis.readUTF());
            client.close();

        } catch (IOException e) {
            e.printStackTrace();
            return;
        }
    }

}

服务器监听代码

package socket;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketTimeoutException;

public class ServerSocketDemo extends Thread {

    private ServerSocket serverSocket;
    private int i = 1;

    public ServerSocketDemo(int port) throws IOException {
        serverSocket = new ServerSocket(port);
        //设置20s内无客户端连接,则抛出SocketTimeoutException异常
        serverSocket.setSoTimeout(20000);
    }

    public void run(){
        while(true) {
            System.out.println("服务端第"+i+"次启动中...对应的端口号为:"+ serverSocket.getLocalPort());
            i++;
            try {
                Socket server = serverSocket.accept();
                
                //彩蛋
                //server.setSoTimeout(5);
				//彩蛋

                //当服务端监听到客户端的连接后才会执行以下代码
                System.out.println("服务端打印的远程主机地址为:"+server.getRemoteSocketAddress());

                //监听来自客户端的消息
                DataInputStream dis = new DataInputStream(server.getInputStream());
                System.out.println("服务端接收到的来自于客户端的信息为:"+dis.readUTF());

                //通过socket向客户端发送信息
                DataOutputStream dos = new DataOutputStream(server.getOutputStream());
                dos.writeUTF("我是服务端,您已连接到:"+server.getLocalSocketAddress());
                server.close();

            }catch (SocketTimeoutException e){
                System.out.println("20s内无客户端连接,正在关闭服务端监听服务");
                continue;
            }catch (IOException e) {
                e.printStackTrace();
                break;
            }


        }
    }

    public static void main(String[] args) {
        try {
            Thread t1 = new ServerSocketDemo(8089);
            t1.run();
        }catch(IOException e){
            e.printStackTrace();
            return;
        }
    }

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值