《Java从入门到放弃》JavaSE入门篇:网络编程(入门版)
要进行网络编程,首先要搞清楚目的是什么。
网络编程说简单点就是在网络上的计算机进行数据的交互。
既然要进行数据交互,那就需要有一个发送方和一个接受方。
按网络上的说法,就是一个攻一个受·
当然,现阶段网上的电脑一般来说都是既接受数据,也能发送数据的,所以说这些电脑都是“插座型”的,进可攻,退可受!!!
好吧,还是使用专业点的名字吧:客户端/服务器。
那么具体到两台电脑,它们是如何来交互数据的呢?请看下图:
从步骤来分析:
一、服务器端程序
1.1创建一个服务器套接字(ServerSocket),并绑定到指定端口。
1.2侦听来自客户端的请求,如果接受到连接则返回套接字对象(socket)。
1.3获得输入/输出流,也就是进行数据的接收或发送。
1.4关闭套接字(socket)。
二、客户端程序
2.1创建一个套接字,向服务器指定商品发送请求。
2.2与服务器正确连接后开始数据的接收或发送。
2.3关闭套接字。
步骤分析完了,接下来就是实施了。
服务器端代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
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(); } } |
客户端代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
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,博客园,感兴趣的小伙伴可以去看相关的其它博文。
《Java从入门到放弃》JavaSE入门篇:网络编程(入门版)的更多相关文章
- 拒绝从入门到放弃_《Python 核心编程 (第二版)》必读目录
目录 目录 关于这本书 必看知识点 最后 关于这本书 <Python 核心编程 (第二版)>是一本 Python 编程的入门书,分为 Python 核心(其实并不核心,应该叫基础) 和 高 ...
- dotnet 从入门到放弃的 500 篇文章合集
本文是记录我从入门到放弃写的博客 博客包括 C#.WPF.UWP.dotnet core .git 和 VisualStudio 和一些算法,所有博客使用 docx 保存 下载:dotnet 从入门到 ...
- JAVA网络编程入门
JAVA网络编程入门 软件结构 C/S结构 B/S结构 无论哪一种结构,都离不开网络的支持.网络编程,就是在网络的条件下实现机器间的通信的过程 网络通信协议 网络通信协议:通信双方必须同时遵守才能完成 ...
- 脑残式网络编程入门(六):什么是公网IP和内网IP?NAT转换又是什么鬼?
本文引用了“帅地”发表于公众号苦逼的码农的技术分享. 1.引言 搞网络通信应用开发的程序员,可能会经常听到外网IP(即互联网IP地址)和内网IP(即局域网IP地址),但他们的区别是什么?又有什么关系呢 ...
- 脑残式网络编程入门(三):HTTP协议必知必会的一些知识
本文原作者:“竹千代”,原文由“玉刚说”写作平台提供写作赞助,原文版权归“玉刚说”微信公众号所有,即时通讯网收录时有改动. 1.前言 无论是即时通讯应用还是传统的信息系统,Http协议都是我们最常打交 ...
- 脑残式网络编程入门(二):我们在读写Socket时,究竟在读写什么?
1.引言 本文接上篇<脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手>,继续脑残式的网络编程知识学习 ^_^. 套接字socket是大多数程序员都非常熟悉的概念,它是计算机 ...
- 脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手
.引言 网络编程中TCP协议的三次握手和四次挥手的问题,在面试中是最为常见的知识点之一.很多读者都知道“三次”和“四次”,但是如果问深入一点,他们往往都无法作出准确回答. 本篇文章尝试使用动画图片的方 ...
- [转帖]脑残式网络编程入门(二):我们在读写Socket时,究竟在读写什么?
脑残式网络编程入门(二):我们在读写Socket时,究竟在读写什么? http://www.52im.net/thread-1732-1-1.html 1.引言 本文接上篇<脑残式网 ...
- [转帖]脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手
脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手 http://www.52im.net/thread-1729-1-1.html 1.引言 网络编程中TCP协议的三次握手和 ...
- 脑残式网络编程入门(五):每天都在用的Ping命令,它到底是什么?
本文引用了公众号纯洁的微笑作者奎哥的技术文章,感谢原作者的分享. 1.前言 老于网络编程熟手来说,在测试和部署网络通信应用(比如IM聊天.实时音视频等)时,如果发现网络连接超时,第一时间想到的就是 ...
随机推荐
- 【Centos】yum安装MySQL
安装步骤 1. 点击此处下载MySQL的YUM源 -- [ MySQL RPM] 选择适合你平台的rpm,我的是centos7 2. 安装MySQL的yum源,即RPM sudo yum locali ...
- JAVA中反射机制一
反射一 基本概念 一.反射机制的基本概念 什么是反射?反射是指在运行状态中,对于任意一个类,都可以获取到这个类的所有属性和方法:对于任意一个对象,都能够调用这个对象的任意方法和属性:这种动态获取信息及 ...
- 给MySQL_5.7 配置环境变量
给MySQL_5.7 配置环境变量... 1.右键我的电脑--选择属性 2.选择高级系统设置 3.根据MySQL的安装路径.来配置MYSQL_HOME环境变量 找到MySQL5.7的安装根目录 4 ...
- Andrew Ng机器学习课程笔记--week9(上)(异常检测&推荐系统)
本周内容较多,故分为上下两篇文章. 一.内容概要 1. Anomaly Detection Density Estimation Problem Motivation Gaussian Distrib ...
- CSS3笔记之第一天
通过展示实例来初步学习CSS3 1.背景 设置背景色:background-color:#b0c4de; 设置背景图片:background-image:url('paper.gif'); 设置背景图 ...
- 第二篇--Jmeter测试Java请求
前提:需要准备eclipse作为开发工具,安装jdk,准备完毕,接下来开工喽! 1.新建Java工程BMIrisJNIJarTest,新建lib目录,将Jmeter安装目录下lib/ext包下的Apa ...
- Pyhton 学习笔记1
格式化 最后一个常见的问题是如何输出格式化的字符串.我们经常会输出类似'亲爱的xxx你好!你xx月的话费是xx,余额是xx'之类的字符串,而xxx的内容都是根据变量变化的,所以,需要一种简便的格式化字 ...
- batの磕磕碰碰
前两天用kettle和存储过程实现了两个划小接口,然后用bat调用它们,在自己的xp系统上测试完全通过,没有任何问题. 然后很开心滴把成果打包给北京的同事他们使用.第二天他们跟我说无法取数,我马上就流 ...
- ascii codec can't decode byte 0xe8 in position 0:ordinal not in range(128) python代码报错
import sys reload(sys) sys.setdefaultencoding('utf-8')
- C++中4个类型转换相关的关键字/特点/应用场合
reinterpret_cast是C++里面的一个强制类型转换符,能够将任何的指针类型转换成其他的任何指针类型:能够将任何的整数类型转换成指针类型,反之亦然:滥用reinterpret_cast强制类 ...