java网络编程讲解

小编 2026-06-21 阅读:1410 评论:0
对于ServerSocket类(服务端): 当ServerSocket的类的对象创建后,调用accept()方法接收客户端发来的连接请求。 accept()方法采用的是“阻塞”方式监听,直到...

对于ServerSocket类(服务端):

  1. 当ServerSocket的类的对象创建后,调用accept()方法接收客户端发来的连接请求。

  2. accept()方法采用的是“阻塞”方式监听,直到客户端连接之后程序才可以向下继续执行并返回一个与客户端Socket对象相连的Socket对象。

  3. 服务器端的Socket对象使用getOutputStream()方法获得的输出流,将指向客户端Socket对象使用getInputStream()方法获得的那个输入流。

  4. 同样地,服务器端的插座对象使用的getInputStream()方法获得的输入流,将指向客户端Socket对象使用getOutputStream()方法获得的那个输出流。

    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.util.Scanner;
    
    public class MyServerDemo {
    	public MyServerDemo(){
    	}
    	public static void main(String[] args) {
    		ServerSocket server =null;										//声明ServerSocket对象
    		Socket socket =null;											//声明Socket对象
    		DataInputStream din=null;										//声明DataInputStream对象
    		DataOutputStream dout=null;										//声明DataOutputStream对象
    		try
    		{
    			server =new ServerSocket (8000);							//实例化ServerSocket对象
    			System.out.println(\"等待客户端连接......\");
    			socket = server.accept();									//实例化Socket对象,阻塞等待连接
    			System.out.println(\"客户端连接上......\\n客户端来自:\"+
    				socket.getInetAddress().getHostAddress());				//获取客户端IP		
    			din = new DataInputStream(socket.getInputStream());			//实例化DataInputStream对象
    			dout =new DataOutputStream(socket.getOutputStream());		//实例化DataOutputStream对象
    			String strMassage =null;
    			Scanner scan =new Scanner(System.in);
    			boolean flag=true;											//标记位
    			while (flag)												//无限制接收客户端连接
    			{
    				strMassage = din.readUTF();								//读取客户端发送信息
    				if (!strMassage.equals(\"bye\"))							//若信息为bye则退出,否则继续
    				{
    					System.out.println(\"客户端消息:\\n\"+strMassage);	//输出客户端内容
    					System.out.println(\"回复客户端:\");
    					strMassage =scan.next();							//输入消息
    					dout.writeUTF(strMassage);							//向客户端发送
    					dout.flush();
    				}else{
    					din.close();										//关闭输入流
    					dout.close();										//关闭输出流
    					flag=false;											//退出死循环
    				}
    			}
    		server.close();													//关闭服务器
    		System.out.println(\"服务器退出....\");
    		}catch (Exception e){
    			e.printStackTrace();
    		}
    	}
    }

     

对于Socket类(客户端):

  1. 在Java中,有专门的Socket类来处理用户的请求和响应。利用Socket 类的方法,就可以实现两台计算机之间的通信。

  2. 客户端创建Socket 对象之后,会向指定的IP地址即端口尝试连接。

  3. 服务端的Socket接到连接请求后创建新的Socket与客户端的Socket进行连接。若服务端Socket与客户端Socket连接成功之后,就可以获取Socket中的输入输出流。

    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.net.Socket;
    import java.util.Scanner;
    
    public class ClientDemo {
    	public ClientDemo(){
    	}
    	public static void main(String[] args) {
    		Socket socket =null;										//声明Socket对象
    		DataInputStream din=null;									//声明DataInputStream对象
    		DataOutputStream dout=null;									//声明DataOutputStream对象
    		try {
    			System.out.println(\"尝试连接服务器......\");
    			socket = new Socket(\"127.0.0.1\",8000);					//实例化Socket对象
    			System.out.println(\"连接服务器成功......\");
    			din = new DataInputStream(socket.getInputStream());		//实例化DataInputStream对象
    			dout =new DataOutputStream(socket.getOutputStream());	//实例化DataOutputStream对象
    			String strMassage =null;
    			Scanner scan =new Scanner(System.in);
    			boolean flag=true;										//标记位
    			while (flag)
    			{
    				System.out.println(\"发送消息:\");
    				strMassage =scan.next();
    				dout.writeUTF(strMassage);							//向服务器发送消息
    				dout.flush();
    				strMassage = din.readUTF();							//读取服务器消息
    				if (!strMassage.equals(\"bye\"))						//若信息为bye则退出,否则继续
    				{
    					System.out.println(\"接收消息:\\n\"+strMassage);	//输出消息
    				}else{
    					din.close();									//关闭输入流
    					dout.close();									//关闭输出流
    					flag=false;										//退出死循环
    				}
    			}
    		socket.close();												//关闭服务器
    		System.out.println(\"服务器退出....\");
    		}catch (Exception e){
    			e.printStackTrace();
    		}
    	}
    }
    


     

版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

热门文章
  • 机房智能化温湿度解决方式之POE供电以太网温湿度传感器

    机房智能化温湿度解决方式之POE供电以太网温湿度传感器
    机房智能化温湿度解决方式之POE供电以太网温湿度传感器 北京盈创力和电子科技有限公司 智能型TCP网口温湿度记录仪 北京IP网络温湿度记录仪厂家,北京盈创力和 北京智能型TCP网口温湿度记录仪IP网络温湿度记录仪是一种新型的基于TCP/IP协议双绞线以太网标准温湿度采集模块,利用它可以实现现场温度值、相对湿度值的采集,同时利用其自身的RJ45通信接口可以方便地和机房监控主机或交换机集线器进行联网。 工作于-40℃~85℃工业级带...
  • Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering

    Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering
    Problem Statement 我们考虑一个具有马尔可夫性质、非线性、非高斯的状态空间模型(State Space Model):对于一个时间序列上的观测结果{yt,t∈N}\\{ y_t , t \\in N \\}{yt​,t∈N},我们认为每个观测结果yty_tyt​的生成依赖于一个无法直接观察的隐变量xt∈{xt,t∈N}x_t \\in \\{x_t , t \\in N \\}xt​∈{xt​,t∈N},即:p(...
  • HTTP状态保持的原理

    HTTP状态保持的原理
    a)在用户登录之后,浏览器返回响应的时候会在响应中添加上cookieb)浏览器接收到cookie之后会自动保存c)当用户再次请求同一服务器中的其他网页的时候,浏览器会自动带上之前保存的cookied)服务接收到请求之后可以请 request 对象中取到cookie 判断当前用户是否登录  Http是无状态的,就是连接时数据互通,关闭后...
  • Hive 系统函数及示例

    Hive 系统函数及示例
    查看所有系统函数 show functions; 函数分类 内置函数【系统函数】 数学函数: floor、round、ceil、cos、log2等 字符串函数: length、reverse、trim、lower、get_json_object、repeat等 收集函数: size 转换函数: cast 日期函数: year、month、datediff、date、date_add等 条件函数: coalesce、case…w...
  • CSRF的原理和防范措施

    CSRF的原理和防范措施
    a)攻击原理:i.用户C访问正常网站A时进行登录,浏览器保存A的cookieii.用户C再访问攻击网站B,网站B上有某个隐藏的链接或者图片标签会自动请求网站A的URL地址,例如表单提交,传指定的参数iii.而攻击网站B在访问网站A的时候,浏览器会自动带上网站A的cookieiv.所以网站A在接收到请求之后可判断当前用户是登录状态,所以...
标签列表