关于Java socket

Socket 被称为套接字,是Java 中的 网络编程API,可以通过TCP 协议 和 UDP协议在客户端和服务端中进行网络通信,

其本质是基于TCP和UDP协议之上封装的一个JAVA网络编程接口。

Socket分为客户端和服务端,通信方式为

1. 在服务端创建ServerSocket对象 ServerSocket ss = new ServerSocket(8080);  //8080为指定监听端口,不能被占用

2.服务端监听请求并阻塞 Socket socket = ss.accept(); //调用accept方法后,线程会阻塞,直到客户端连接成功才会释放

3.客户端连接服务端 Socket socket = new Socket("127.0.0.1",8080); //指定连接服务端地址和服务端监听端口

4.连接成功后,服务端接收到客户端连接,双方通过IO流进行通信

---------------------------------------以下演示客户端向服务端发送信息----------------------------------------

服务端:ObjectInputStream client = new ObjectInputStream(socket.getInputStream()); //获取输入流,此时线程会阻塞,直到客户端获取输出流通道

客户端:ObjectOutputStream server = new ObjectOutputStream(socket.getOutputStream()); //获取输出流,此时服务端阻塞线程释放

服务端:Object obj = ois.readObject(); //调用read方法后,线程会再次阻塞,直到客户端调用write方法发送信息

客户端:client .writeObject("hello server im client"); //调用write方法后,服务端read方法收到信息,会释放

服务端:System.out.print(obj.toString()); //服务端输出 hello server im client


总结:服务端socket在调用accept监听客户端连接时会阻塞,收到连接后会释放,若要监听多个客户端请求,可以在循环中进行监听,并创建不同线程处理请求

while(true){

    Socket socket = ss.accept()

    //创建线程处理不同客户端请求,可以使用线程

   ExecutorService executorService = Executors.newCachedThreadPool();
 
executorService.execute(new Thread(){
    //定义处理方式
});

}

通过socket对象获取输出流传输信息,获取输入流读取信息,注意:不要在客户端和服务端同时先获取输入流,因为获取输入流会造成线程阻塞,若两边同时阻塞,则整个连接会被阻塞。

调用read方法时,会读取传输信息,若没有信息传输,会阻塞线程。

注意:若多次调用read方法,每次都会阻塞,若调用时输入流通道中没有新信息,线程会持续阻塞,直到另一端传输信息。


以上为个人学习socket时的一些心得,用作学习记录,如有理解不对之处,欢迎指正


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值