Java网络编程

相关概念:

  • IP地址
  • 端口
  • socket

理论
  • TCP

    区分服务端和客户端

    服务端:

    (1)创建ServerSocket对象,传入监听的端口号

    (2)等待客户端的连接,调用accept方法(若无客户端连接,程序会堵塞此处)

    (3)获取输入输出流进行操作

    (4)设置输出结束标记(socket.shutDownOutput(),或flush(),或字符流nextLine)

    (4)关闭流资源

    客户端:

    (1)创建Socket对象,传入要连接主机地址和端口号

    (2)获取输入输出流

    (3)设置输出结束标记

    (4)关闭流资源

  • UDP

    不区分服务端和客户端,发送目标主机和端口号信息存放在数据报 DatagramPacket 中

    (1)创建DatagramSocket对象,传入监听的端口号

    (2)创建数据报对象,用来接收信息

    (3)调用数据报套接字的 receive方法 接收信息

    (4)拆包获取信息

    (5)发送信息,对方信息封装在 数据报中

    (DatagramPacket datagramPacket1 = new DatagramPacket(bytes1,bytes1.length, InetAddress.getLocalHost(),7777);)

    (6)调用数据报的send方法发送

    (7)关闭数据报套接字


实践

服务器端:

    // 1. 在本机的 9999端口监听,等待连接
// 注意:
// (1)要求本机没有其他服务在监听9999,否则无法通过
// (2)当没有客户端连接时,程序会阻塞等待连接
ServerSocket severSocket = new ServerSocket(9999);
System.out.println("服务器正在监听9999端口..."); // 2.如果有客户端连接,则会返回Socket对象,程序继续
// 细节:这个 ServerSocket 可以通过accept() 返回多个Socket [多个客户端连接服务器的并发]
Socket socket = severSocket.accept();
System.out.println("socket = " + socket.getClass()); // 3.通过 socket.getInputStream() 读取
// 客户端写入到数据通道的数据,显示
InputStream inputStream = socket.getInputStream();
byte[] bytes = new byte[1024];
int length = 0;
while ((length = inputStream.read(bytes))!=-1){
System.out.println(new String(bytes,0,length));
}
inputStream.close();
socket.close();

客户端:

    //1. 连接服务器(ip,端口)
// 连接本机的 9999 端口,连接成功则返回一个Socket对象
Socket socket = new Socket(InetAddress.getLocalHost(), 9999);
System.out.println("客户端连接"); //2. 连接上后,生成Socket,通过socket.getOutputStream()
// 得到与该套接字对应的输出流
OutputStream outputStream = socket.getOutputStream(); //3. 通过输出流,写入数据到数据通道
outputStream.write("言语老是 不起作用".getBytes());
outputStream.close();
socket.close();

Java-net的更多相关文章

  1. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  2. 故障重现(内存篇2),JAVA内存不足导致频繁回收和swap引起的性能问题

    背景起因: 记起以前的另一次也是关于内存的调优分享下   有个系统平时运行非常稳定运行(没经历过大并发考验),然而在一次活动后,人数并发一上来后,系统开始卡. 我按经验开始调优,在每个关键步骤的加入如 ...

  3. Elasticsearch之java的基本操作一

    摘要   接触ElasticSearch已经有一段了.在这期间,遇到很多问题,但在最后自己的不断探索下解决了这些问题.看到网上或多或少的都有一些介绍ElasticSearch相关知识的文档,但个人觉得 ...

  4. 论:开发者信仰之“天下IT是一家“(Java .NET篇)

    比尔盖茨公认的IT界领军人物,打造了辉煌一时的PC时代. 2008年,史蒂夫鲍尔默接替了盖茨的工作,成为微软公司的总裁. 2013年他与微软做了最后的道别. 2013年以后,我才真正看到了微软的变化. ...

  5. 故障重现, JAVA进程内存不够时突然挂掉模拟

    背景,服务器上的一个JAVA服务进程突然挂掉,查看产生了崩溃日志,如下: # Set larger code cache with -XX:ReservedCodeCacheSize= # This ...

  6. 死磕内存篇 --- JAVA进程和linux内存间的大小关系

    运行个JAVA 用sleep去hold住 package org.hjb.test; public class TestOnly { public static void main(String[] ...

  7. 【小程序分享篇 一 】开发了个JAVA小程序, 用于清除内存卡或者U盘里的垃圾文件非常有用

    有一种场景, 手机内存卡空间被用光了,但又不知道哪个文件占用了太大,一个个文件夹去找又太麻烦,所以我开发了个小程序把手机所有文件(包括路径下所有层次子文件夹下的文件)进行一个排序,这样你就可以找出哪个 ...

  8. Java多线程基础学习(二)

    9. 线程安全/共享变量——同步 当多个线程用到同一个变量时,在修改值时存在同时修改的可能性,而此时该变量只能被赋值一次.这就会导致出现“线程安全”问题,这个被多个线程共用的变量称之为“共享变量”. ...

  9. Java多线程基础学习(一)

    1. 创建线程    1.1 通过构造函数:public Thread(Runnable target, String name){}  或:public Thread(Runnable target ...

  10. c#与java的区别

    经常有人问这种问题,用了些时间java之后,发现这俩玩意除了一小部分壳子长的还有能稍微凑合上,基本上没什么相似之处,可以说也就是马甲层面上的相似吧,还是比较短的马甲... 一般C#多用于业务系统的开发 ...

随机推荐

  1. BIGO 如何做到夜间同时运行 2.4K 个工作流实例?

    点亮 ️ Star · 照亮开源之路 GitHub:https://github.com/apache/dolphinscheduler   ​ 精彩回顾 近期,BIGO 的大数据研发工程师许名勇在社 ...

  2. 10月26日内容总结——第三方模块下载与requests、openpyxl模块

    目录 一.第三方模块的下载与使用 下载第三方模块的方式一:pip工具 部分错误解决案例: 下载第三方模块的方式二:pycharm中下载 pip仓库地址 二.网络爬虫模块之requests模块 1.ge ...

  3. .NET 6学习笔记(7)——ASP.NET Core通过配置文件启用HTTPS

    本质上我还是一个Windows App Developer,所以虽然会做一些ASP.NET Core的工作,但通常这些ASP.NET Core的程序会托管在Windows Service上,并且大部分 ...

  4. 使用HtmlAgilityPack 爬取 国家统计局 区划和城乡划分代码

    HtmlAgilityPack:Html解析神器,根据url地址解析html页面内容. 项目引用HtmlAgilityPack.dll文件或者通过安装 nuget 包 HtmlAgilityPack ...

  5. ECharts 饼图数据放在饼图内部显示

    1.业务需求 将数据显示在饼图内部,格式化百分比显示,鼠标放上去显示具体名称和数值 原样式如下 2.业务实现 调整代码如下,核心语句已标记注释 option = { title: { text: 'R ...

  6. STM32F4寄存器串口DMA汇总

    1.初始化 //RCC RCC->APB1ENR|=1<<20; //使能串口5时钟 RCC->APB1ENR|=1<<19; //使能串口4时钟 RCC-> ...

  7. C语言-三子棋项目

    开源地址 https://kxd.lanzoul.com/iLwHG0e4nupc 肯定有大量BUG 求指出 电脑自动下棋的算法很差 毕竟我也没特意去研究

  8. NOIP2022 总结

    \(\text{summary}\) 怎么都没想到这次题目那么有新意:把这样的题 \(T2\) 放 \(T2\)...... 策略出现很大问题,赛后也意识到很多选手也会出现同样的问题:死磕 \(T2\ ...

  9. JZOJ 5372. 【NOIP2017提高A组模拟9.17】猫

    题目大意 对于 \(m = [1,\lfloor \frac n 2 \rfloor]\) 要求在一个序列中恰好选出 \(m\) 个不相邻的数使得权值和最大 其中 \(1\) 的左边是 \(n\),\ ...

  10. C# 时间各种格式

    1.1 取当前年月日时分秒 currentTime=System.DateTime.Now; 1.2 取当前年 int 年=currentTime.Year; 1.3 取当前月 int 月=curre ...