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

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

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

按网络上的说法,就是一个攻一个受·

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

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

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


从步骤来分析:

一、服务器端程序

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入门篇:网络编程(入门版)的更多相关文章

  1. 拒绝从入门到放弃_《Python 核心编程 (第二版)》必读目录

    目录 目录 关于这本书 必看知识点 最后 关于这本书 <Python 核心编程 (第二版)>是一本 Python 编程的入门书,分为 Python 核心(其实并不核心,应该叫基础) 和 高 ...

  2. dotnet 从入门到放弃的 500 篇文章合集

    本文是记录我从入门到放弃写的博客 博客包括 C#.WPF.UWP.dotnet core .git 和 VisualStudio 和一些算法,所有博客使用 docx 保存 下载:dotnet 从入门到 ...

  3. JAVA网络编程入门

    JAVA网络编程入门 软件结构 C/S结构 B/S结构 无论哪一种结构,都离不开网络的支持.网络编程,就是在网络的条件下实现机器间的通信的过程 网络通信协议 网络通信协议:通信双方必须同时遵守才能完成 ...

  4. 脑残式网络编程入门(六):什么是公网IP和内网IP?NAT转换又是什么鬼?

    本文引用了“帅地”发表于公众号苦逼的码农的技术分享. 1.引言 搞网络通信应用开发的程序员,可能会经常听到外网IP(即互联网IP地址)和内网IP(即局域网IP地址),但他们的区别是什么?又有什么关系呢 ...

  5. 脑残式网络编程入门(三):HTTP协议必知必会的一些知识

    本文原作者:“竹千代”,原文由“玉刚说”写作平台提供写作赞助,原文版权归“玉刚说”微信公众号所有,即时通讯网收录时有改动. 1.前言 无论是即时通讯应用还是传统的信息系统,Http协议都是我们最常打交 ...

  6. 脑残式网络编程入门(二):我们在读写Socket时,究竟在读写什么?

    1.引言 本文接上篇<脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手>,继续脑残式的网络编程知识学习 ^_^. 套接字socket是大多数程序员都非常熟悉的概念,它是计算机 ...

  7. 脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手

    .引言 网络编程中TCP协议的三次握手和四次挥手的问题,在面试中是最为常见的知识点之一.很多读者都知道“三次”和“四次”,但是如果问深入一点,他们往往都无法作出准确回答. 本篇文章尝试使用动画图片的方 ...

  8. [转帖]脑残式网络编程入门(二):我们在读写Socket时,究竟在读写什么?

    脑残式网络编程入门(二):我们在读写Socket时,究竟在读写什么?     http://www.52im.net/thread-1732-1-1.html   1.引言 本文接上篇<脑残式网 ...

  9. [转帖]脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手

    脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手   http://www.52im.net/thread-1729-1-1.html     1.引言 网络编程中TCP协议的三次握手和 ...

  10. 脑残式网络编程入门(五):每天都在用的Ping命令,它到底是什么?

    本文引用了公众号纯洁的微笑作者奎哥的技术文章,感谢原作者的分享. 1.前言   老于网络编程熟手来说,在测试和部署网络通信应用(比如IM聊天.实时音视频等)时,如果发现网络连接超时,第一时间想到的就是 ...

随机推荐

  1. 浏览器支持播放的视频播放格式要求(H5的video标签)

    今天给一个客户上传视频后发现,即使是MP4格式的视频浏览器也打不开,找了好久的问题,最红发现客户视频的编码方式不是h5支持的,折腾了好久,最终确认了浏览器对于MP4编码方式的如下: 浏览器对mp4的编 ...

  2. JS中的函数、BOM和DOM操作

     一.JS中的函数 [关于注释] /** [文档注释]:开头两个*.写在函数上方,在调用函数时可以看到文档上方的描述信息. */   // 单行注释 /* 多行注释 */ 1.函数的声明及调用 (1) ...

  3. Fatal error: Class 'LearningPHP1\mysqli' not found

    在php文件的头部使用了namespace 结果报错mysqli不在LearningPHP1中, 结论:如果定义了命名空间,在使用mysqli做连接的时候就要指明mysqli所在的命名空间. < ...

  4. Sql Server数据库使用触发器和sqlbulkcopy大批量数据插入更新

    需要了解的知识 1.触发器 2.sqlbulkcopy 我的用途 开发数据库同步的工具,需要大批量数据插入和数据更新. 方式 使用SqlBulkCopy类对数据进行数据批量复制,将需要同步数据的表新建 ...

  5. Android SharedPreferences基本用法

    使用SharedPreferences SharedPreferences是Android平台上一个轻量级的存储类, 用来保存应用的一些常用配置. SharedPreferences与Editor简介 ...

  6. GHO2VMDK转换工具分享含VS2010源码

    平常经常用到虚拟机,每次从gho转换为vmdk时都要输入cmd代码,觉得麻烦,自己动手做了个gho2vmdk转换工具,集成ghost32.exe文件,可以一键转换,省时省事.运行时会将ghost32. ...

  7. C#中MessageBox.Show()方法详解

    1. // 摘要: // 显示具有指定文本的消息框. // // 参数: // text: // 要在消息框中显示的文本. // // 返回结果: // System.Windows.Forms.Di ...

  8. 基于linux vim环境python代码自动补全

    (一)简述 在使用vim编写python文件的过程中,默认的vim不会实现代码补全功能,在写程序或者是改程序的时候不是很方面,很容易出错,但是vim提供了各种插件,其中包括这个python文件的自动补 ...

  9. SSH2项目网上书店系统手把手教学_Struts2+Spring+Hibernate整合开发

    一 序言 鉴于目前J2EE的火热程度,SSH2是每个学生毕业前都必须掌握的一门技术,所以在这里我就使用SSH2技术做一个小型项目,和大家一起学习. SSH2技术的基础概论就不再提了,直接说特点吧. 1 ...

  10. 16汇编第十讲完结Call变为函数以及指令的最后讲解

    16汇编完结Call变为函数以及指令的最后讲解 学了10天的16位汇编,这一讲就结束了,这里总结一下昨天的LOOP指令的缺陷,因为lOOP指令的缺陷,所以我们都改为下面的汇编代码使用了,自己去写,其中 ...