java网络编程语言_Java网络编程(一):初体验

有同学反应,光写数据结构太枯燥了,能不能搞点有趣的东西。嗯,我决定把网络这一部分提到前边来,做一点有趣的东西。这节课,我们体验一下Java网络编程。

Java语言被越来越多地应用在网络环境下,偏重于服务端的开发,还有分布式系统,软件定义硬件功能的场景等等。这些场景下,都非常依赖于语言的网络开发的能力。我们今天就尝试使用一下Java的网络编程。

Java的网络编程的接口大多数位于 http://java.net 和 java.nio 这两个package里,掌握这两个package是Java程序员必备的基础技能。

服务端

连接网络的过程和打电话的过程可以进行类比。比如,在手机网络中,每一个手机都有一个手机号,我们知道了某个提供服务的号码(比如外卖电话,银行电话等),拨通这个号码,就可以进行通话了。计算机网络也差不多,在计算机网络中,每个计算机上的每个网卡,都会有一个号码相互识别,这个号码在不同的场景下,会有不同的表现,比如,网址:知乎 - 与世界分享你的知识、经验和见解,再比如IP地址,再比如mac地址。后面我们会一点点讲解这些地址分别在什么场景下使用的。现在我们只需要知道一个服务端是要有一个地址的。而在我们的今天的场景下,这个地址(可以类比手机号码)就是IP地址。

不多说了,先上代码,跑起来,大家就明白了。

public class Server {

public static void main(String args[]) throws IOException{

ServerSocket ss = new ServerSocket(8080);

Socket conn = ss.accept();

BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(conn.getOutputStream()));

String s = br.readLine();

while (s != null) {

System.out.println(s);

bw.write(s.toUpperCase() + "\n");

bw.flush();

s = br.readLine();

}

br.close();

bw.close();

conn.close();

}

}

可以看到服务端在8080端口上开启了一个ServerSocket,等待连接。大家可以单步调试一下,看看当调用到accept的时候会发生什么情况。

然后就是创建一个Reader用于从网络上读数据,一个Writer向网络上写数据。

读进来的一行,把它转成大写,再发回到客户端。

客户端

也把代码放上来

public class Client {

public static void main(String args[]) throws IOException {

Socket conn = new Socket("127.0.0.1", 8080);

BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(conn.getOutputStream()));

bw.write("hello\n");

bw.flush();

String s = br.readLine();

System.out.println(s);

bw.write("world\n");

bw.flush();

s = br.readLine();

System.out.println(s);

br.close();

bw.close();

conn.close();

}

}

和服务端对应的,客户端创建一个Socket,这个 Socket 在构造的时候就发起向服务端的连接。连接了以后,也创建一个 Reader,一个 Writer。接着向服务端发送了两个小写字符串。

先运行服务端,再运行客户端,我们可以看到这样的结果:

问题

今天就先稍微体验一下吧。这里涉及到socket,ip 地址, 端口号(程序中是8080)这些到底有什么关系?在Java虚拟机里到底是如何实现的?这些问题,我们会在接下来的课程里慢慢解释。

今天的作业,从控制台上输入一个字符串,然后发送到服务端。

已标记关键词 清除标记
表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页