Java学习:网络编程

一、Socket编程

1.服务器端建立通讯(ServerSocket的使用)

  • 服务器建立通讯ServerSocket。
  • 服务器建立Socket等待客户端连接并接收。
  • 建立IO输入流读取客户端发送的数据和向客户端发送数据。

具体代码:

java 复制代码
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
 
public class Server {
   public static void main(String[] args) {
      try {
         ServerSocket ss = new ServerSocket(8888);
         //8888表示服务器要监听的端口,等待客户端连接。
         //如果8888端口已经被其他进程占用,则会抛出异常IOException。
         System.out.println("启动服务器....");
         Socket s = ss.accept();
         //接受客户端连接,Socket套接口对象。
         System.out.println("客户端:"+s.getInetAddress().getLocalHost()+"已连接到服务器");
         //getInetAddress()返回客户端IP地址,getLocalHost()返回域名和IP地址。
         BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
         //读取客户端发送来的消息。
         String mess = br.readLine();
         System.out.println("客户端:"+mess);
         BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
         //向客户端发送消息。
         bw.write(mess+"\n");
         bw.flush();
      } catch (IOException e) {
         e.printStackTrace();
      }
   }
}

ServerSocket不是一种Socket,它可以监听服务器端口,来获取客户端的连接情况,通过接收客户端连接来建立Socket。如果监听端口已经被其他进程占用,则会抛出异常IOException。

2.客户端建立通讯(Socket)

  • 创建Socket通信,设置通信服务器的IP和Port
  • 建立IO输出流向服务器发送数据消息和读取服务器发送来的数据消息

具体代码:

java 复制代码
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;
 
public class Client {
   public static void main(String[] args) {
      try {
         Socket s = new Socket("127.0.0.1",8888);
         //127.0.0.1为要进行通讯的服务器IP,8888为要客户端连接到的服务器端口
         //客户端发起Https通讯要走传输层端口号443,而http通讯则是80端口。
         //而服务器端端口号是指定的,不是固定的。
         //构建IO
         InputStream is = s.getInputStream();
         OutputStream os = s.getOutputStream();
         
         BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));
         //向服务器端发送一条消息
         bw.write("测试客户端和服务器通信,服务器接收到消息返回到客户端\n");
         bw.flush();
         
         //读取服务器返回的消息
         BufferedReader br = new BufferedReader(new InputStreamReader(is));
         String mess = br.readLine();
         System.out.println("服务器:"+mess);
      } catch (UnknownHostException e) {
         e.printStackTrace();
      } catch (IOException e) {
         e.printStackTrace();
      }
   }
}

Socket建立TDP连接,绑定服务器IP地址和指定服务器端口,与服务器建立连接。当服务器地址不正确或无法识别时,会抛出UnknownHostException异常,当Socket等待连接超时会抛出SocketTimeoutException异常,当服务器端口被占用无法绑定端口时,会抛出BindException异常,当服务器没有启动,没有监听对应端口或拒绝连接时,会抛出ConnectException异常,它们都是IOException的直接或间接子类。

相关推荐
郑州光合科技余经理39 分钟前
本地生活服务系统:预约状态和进度通知接口怎么拆
java·开发语言·前端·javascript·后端·php·生活
tianbin91142 分钟前
大模型训练全流程中,API聚合网关如何解决多模型调度难题
网络·后端
靠沿43 分钟前
MySQL数据库基础——事务
java·数据库·mysql
曦夜日长1 小时前
Git系统篇,Git远程仓库(三):本地仓库与远程仓库的交互
linux·服务器·网络·git·交互
学linux的QQ蛋1 小时前
sys文件系统与misc文件系统学习小总结
linux·学习·驱动
碧海银沙音频科技研究院5 小时前
炬芯ATS3089X手表的HFP通话不自动路由到设备BT的问题解决
网络·人工智能·嵌入式硬件·算法
Joy T7 小时前
Agent 确定性上下文设计:从 Prompt 参数注入到能力分层
java·开发语言·微服务·架构·prompt·agent context
EasyDSS9 小时前
连锁扩张管控难?一套视频会议/直播/点播/集群对讲EasyDSS音视频云平台打通门店全流程数字化
网络·音视频·easydss
m0_587383009 小时前
广州 24 小时自助健身房解决方案技术实现与实战指南
java·spring·小程序·架构·需求分析
·云扬·10 小时前
Prompt 工程与安全:从 System 设计到注入防御
java·人工智能·安全·ai·prompt