《java从入门到放弃》javase入门篇:网络编程(入门版)

     2022-03-23     147

关键词:

要进行网络编程,首先要搞清楚目的是什么。

网络编程说简单点就是在网络上的计算机进行数据的交互。

技术分享

既然要进行数据交互,那就需要有一个发送方和一个接受方。

按网络上的说法,就是一个攻一个受·技术分享

当然,现阶段网上的电脑一般来说都是既接受数据,也能发送数据的,所以说这些电脑都是“插座型”的,进可攻,退可受!!!

好吧,还是使用专业点的名字吧:客户端/服务器


那么具体到两台电脑,它们是如何来交互数据的呢?请看下图:

技术分享


从步骤来分析:

一、服务器端程序

    1.1创建一个服务器套接字(ServerSocket),并绑定到指定端口。

    1.2侦听来自客户端的请求,如果接受到连接则返回套接字对象(socket)。

    1.3获得输入/输出流,也就是进行数据的接收或发送。

    1.4关闭套接字(socket)。

二、客户端程序

    2.1创建一个套接字,向服务器指定商品发送请求。

    2.2与服务器正确连接后开始数据的接收或发送。

    2.3关闭套接字。


步骤分析完了,接下来就是实施了。

服务器端代码如下:

public class MyServer {
	private static final int SERVER_PORT = 9527; // 指定侦听端口

	public MyServer() {
		try {
			ServerSocket ss = new ServerSocket(SERVER_PORT); // 创建服务器套接字
			System.out.println("服务端已启动,正在等待客户端...");
			Socket s = ss.accept(); // 侦听来自客户端的请求
			InputStream in = s.getInputStream(); // 获得输入流,用来接收数据
			OutputStream out = s.getOutputStream(); // 获得输出流,用来发送数据
			byte[] buf = new byte[1024]; // 数据缓存
			int len = in.read(buf); // 从输入流中读取数据
			String strFromClient = new String(buf, 0, len);
			System.out.print("来自客户端的信息>>");
			System.out.println(strFromClient);
			String strToClient = "我也很好!";
			out.write(strToClient.getBytes()); // 往输出流中发送数据
			// 关闭输入流和输出流
			in.close();
			out.close();
			// 关闭通信套接字和服务器套接字
			s.close();
			ss.close();
			System.out.println("服务端已关闭。");
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public static void main(String[] args) {
		MyServer ms = new MyServer();
	}
}

客户端代码如下:

public class MyClient {
	private static final int SERVER_PORT = 9527;  //服务器的侦听端口
	public MyClient() {
		try {  
			//由于服务端也是运行在本机,所以创建本机的InetAddress对象
			InetAddress address = InetAddress.getByName("localhost");
			Socket s = new Socket(address, SERVER_PORT);  //向服务器侦听端口发出请求
			System.out.println("客户端已启动。");
			InputStream in = s.getInputStream();     //获得输入流,用来接收数据
			OutputStream out = s.getOutputStream();  //获得输出流,用来发送数据
			String strToServer = "你好!";
			out.write(strToServer.getBytes());   //往输出流中发送数据
			byte[] buf = new byte[1024];
			int len = in.read(buf);              //从输入流中读取数据
			String strFromServer = new String(buf, 0, len);	
			System.out.print("来自服务端的回答>>");
			System.out.println(strFromServer);
			in.close();out.close();  //关闭输入流和输出流
			s.close();               //关闭通信套接字
			System.out.println("客户端已关闭。");
		} catch (UnknownHostException nhe) {
			System.out.println("未找到指定主机...");
		} catch (IOException ioe) { 
	    	ioe.printStackTrace();
		}
	}
	
	public static void main(String[] args) {
		MyClient mc = new MyClient();
	}
}


先运行服务器端

技术分享


再运行客户端,可以发现服务器端的内容发生了变化

技术分享

再切换到客户端的输出窗口

技术分享

客户端的输出内容如下:

技术分享


有兴趣的看官可以修改代码,让它变成可以从控制台反复输入文字来交互。研究得更深些的朋友,可以尝试发送文件。

网络编程最基本的内容到这儿就结束了,此处应有点赞!!!技术分享


 “软件思维”博客地址:51CTO博客园,感兴趣的小伙伴可以去看相关的其它博文。  


 

本文出自 “软件思维” 博客,请务必保留此出处http://softi.blog.51cto.com/13093971/1967444

《java从入门到放弃》javase入门篇:单元测试

单元测试其实没什么好说的,直接看操作步骤!我们来测试前一篇的小明买食物的方法。第一步:在小明类上点右键,然后再new一个JUnitTestCase650)this.width=650;"src="https://s3.51cto.com/wyfs02/M02/A5/8D/wKioL1m_iAygNbgSAABZDwejGG4076.png"title="11.png"w... 查看详情

《java从入门到放弃》javase篇:数组

数组,就是一组数!!!之前我们学习的变量只能保存一个数据,如果一个部门有50个员工的姓名要保存,怎么办?如果定义50个变量··················Stringname1;Stringname2;............Stringname49;Stringname50;,这画面太美,我不... 查看详情

《java从入门到放弃》javase入门篇:面向对象语法一(入门版)

前一次简单说明了一下面向对象编程的概念,今天我们就把这些概念通过Java语法来实现,然后看看效果。来看第一个案例:定义女神类,再根据女神类创建三个女神对象,并使用女神对象的属性和方法。第一步:定义女神类(... 查看详情

《java从入门到放弃》javase入门篇:面向对象语法二(入门版)

想了半天,发现单独的封装和多态没什么好讲的,我们就简单说说Java里面对应的语法吧。相关内容如下:一、访问修饰符二、getter/setter方法三、构造方法四、super和this五、static关键字六、final关键字七、方法重写八、抽象类和... 查看详情

《java从入门到放弃》javase入门篇:练习——单身狗租赁系统

今天,我们要玩个大的!!!我们把之前使用数组做的这个单身狗系统改版成数据库版本,并且使用面向对象里面的一些简单思想。如果有不知道这个系统的看官,请跳转到目录页,然后再选择单身狗系统(数组版)先围观五分钟... 查看详情

《java从入门到放弃》javase篇:程序结构

程序的结构一般分为三种:顺序结构。选择结构。循环结构。一、顺序结构:这个不用多说吧,跟我们平时写文章的顺序一样,从上往下。650)this.width=650;"src="https://s3.51cto.com/wyfs02/M01/A2/70/wKioL1mf0MqwRCa0AAA_SnPBxrY664.png"title="11.png"style... 查看详情

《java从入门到放弃》javase篇:程序结构

程序的结构一般分为三种:顺序结构。选择结构。循环结构。一、顺序结构:这个不用多说吧,跟我们平时写文章的顺序一样,从上往下。650)this.width=650;"src="https://s3.51cto.com/wyfs02/M01/A2/70/wKioL1mf0MqwRCa0AAA_SnPBxrY664.png"title="11.png"style... 查看详情

《java从入门到放弃》javase篇:程序结构

程序的结构一般分为三种:顺序结构。选择结构。循环结构。 一、顺序结构:这个不用多说吧,跟我们平时写文章的顺序一样,从上往下。 二、选择结构:从名字就能看出,要选择嘛,到底是要漂亮滴妹子,还是要有钱... 查看详情

《java从入门到放弃》javase篇:综合练习——单身狗租赁系统(数组版)

因为现在只学习了基本语法,所以在综合练习之前,先补充关于方法概念。方法的作用:把一系列的代码放在一起,然后再取个别名。之后通过这个别名的调用,就相当于执行了这一系列的代码。方法的语法:([]中的内容表示... 查看详情

《java从入门到放弃》文章目录

...,等相关内容都写完后,再按学习顺序来整理。《Java从入门到放弃》入门篇:XMLHttpRequest的基本用法《Java从入门到放弃》入门篇:Struts2的基本访问方《Java从入门到放弃》入门篇:Struts2的基本访 查看详情

《java从入门到放弃》入门篇:struts2的拦截器基本语法

拦截器,顾名思义,是拦截不是打劫!!!(图片来自于网络,如果有版权或道德问题,请通知本博主删除,谢谢)是贼个样子滴650)this.width=650;"src="https://s5.51cto.com/wyfs02/M00/9D/6C/wKioL1l__fKiIMqHAAKhGk9OcQ8075.png"title="14.png"width="230"height... 查看详情

《java从入门到放弃》入门篇:变量

变量是什么玩意呢?变量,顾名思义就是能变化的量--  好吧,举个栗子。图片上的各种餐具,就是变量,因为同一个盘子可以在不同的时间装不同的菜,在这一桌可以装土豆肉丝,在下一桌可以装清炒黄瓜(当然,这个盘... 查看详情

《java从入门到放弃》入门篇:hibernate查询——hql

不知不觉又到了hibernate的最后一篇了,只感觉时光飞逝~,岁月如梭~!转眼之间,我们就···························,好吧,想装个X,结果装不下去了,还是直接开始吧·650)this.width=650;"src="https://img.baidu.com/hi/jx2/j_00... 查看详情

《java从入门到放弃》入门篇:xmlhttprequest的基本用法

不闲扯,直接开讲。使用XMLHttpRequest对象,主要分为以下七个步骤:创建对象设置过期时间设置数据格式初始化HTTP请求设置HTTP头请求回传数据的处理发送HTTP请求对应代码如下所示<script type="text/javascript">   &nbs... 查看详情

java从入门到放弃——01.java环境搭建

本文目标:下载与安装JDK配置Java环境 1、JDK9下载:       下载地址:https://www.oracle.com/technetwork/java/javase/downloads/java-archive-javase9-3934878.html 2、安装JDK:      打开安装包,除了下图可以取消公共JRE¹... 查看详情

《java从入门到放弃》入门篇:运算符

运算符分为运算和符。运算:是一种行为,通过已知量的可能的组合,获得新的量。 符:上古时期,符是沟通人和神的秘密图案,所以符是不可以随便乱画的,故有所谓“画符不知窍,反惹鬼神笑;画符若知窍,惊得鬼神叫”... 查看详情

《java从入门到放弃》入门篇:运算符

运算符分为运算和符。运算:是一种行为,通过已知量的可能的组合,获得新的量。 符:上古时期,符是沟通人和神的秘密图案,所以符是不可以随便乱画的,故有所谓“画符不知窍,反惹鬼神笑;画符若知窍,惊得鬼神叫”... 查看详情

《java从入门到放弃》入门篇:hibernate基本配置

hibernate是个什么玩意呢?简单点说,就是别人写好的一套访问数据库的东东,底层其实就是JDBC。使用JDBC就像以前没有电饭煲,我们要自己根据经验,多少人煮多少米,放多少水,用多大的火,煮多长时间,整个过程都需要自己... 查看详情