#Java学习之路——基础阶段二(第九篇)

时间:2022-10-01 15:24:15

我的学习阶段是跟着CZBK黑马的双源课程,学习目标以及博客是为了审查自己的学习情况,毕竟看一遍,敲一遍,和自己归纳总结一遍有着很大的区别,在此期间我会参杂Java疯狂讲义(第四版)里面的内容。

前言:此随笔主要是Java基础中的基础,相信大家对这方面肯定有着自己的理解和认识,具体详解可以参照万能的baidu,有的我就一笔带过,希望在我的学习之路上能够有大牛进行指导,也有更多的小伙伴共勉。

1.网络编程入门

首先要了解软件的结构有两种一种是C/S全称是Client/server 客户端和服务器之间的, 还有一种是B/S 全称是Browser/Service 浏览器和服务器之间的架构。而网络编程是在一定的协议的基础下,实现两台计算机的通信。

然后就是网络通信协议,通信协议是对计算机必须遵循的规则,只有遵循了这些规则才能完成之间的通讯。TCP/IP是互联网最基本最广泛的协议。才用了四层分层模型,每一层需要呼叫下一层来完成自己的需求。

TCP协议:是互联网面向对象的协议,这里客户端和服务器端需要进行三次交互从而达到连接的可靠。也称这三次交互叫三次握手。

UDP协议:是一个面向无连接的协议,是在不需要请求的情况下服务器发送数据包的一种协议,直接送达但是容易丢十数据,每个数据包的大小控制在64kb之内。

网络编程的三要素:协议,IP地址,端口号。

协议:是设定的连接规则,必须要在遵守规则的情况下进行连接。

IP地址:是一个设备号,可以理解为每个电脑特定的身份信息。这里有IPV4/IPV6两种。

常用的命令:Ipconfig在控制台输入,用来查询本机的IP地址

      Ping 空格 IP地址用来查看网络是否能连接通路

而特殊的IP地址有127.0.0.1和localhost两种,这是本机的本地IP地址。

2.TCP通信程序

TCP能完成两台计算机之间的通讯。这里主要是服务器端和客户端两种。

在Java中提供了两个类来完成服务器和客户端之间的通讯,一种是Socket和ServerSocket。创建Socket请求服务器的连接,创建服务器ServerSocket等待请求。

Socket类:该类接近客户端套接字,套接字指的是两台设备之间的通讯端点。

构造方法:

Socket 参数传入的是要连接的地址IP和端口号。而如果要进行网络软件的测试一般是本地的127.0.0.1和localhost两种这种不进行任何网络协议的传输。

成员方法:

·getInputStream 返回此套接字的输入流

·getOutputStream 返回此套接字的输出流

·close 关闭此套接字

·shutdownOutput 禁用此套接字的输出流

serverSocket类:这个类实现了服务器端的套接字,等待通过网络的请求。

构造方法:

server 参数传入的是端口号。

成员方法:

·accept 倾听并接受连接,返回一个新的Socket对象。用鱼和客户端实现通讯,这个方法用一直会阻塞到建立连接。

这里是服务器端的实现:

其中运用到了ServerSocket / Socket / Thread / FileOutputStream /

这里所用到的优化:

为了防止socket是用完之后就进行关闭,可以使用While(true)方法将功能一直实现,而用了Thread 多线程方法为了能够在别人上传大文件时最服务器的占用使用了多线程的方法。

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket; public class server {
public static void main(String[] args) throws IOException {
System.out.println("server begining!");
ServerSocket serverSocket = new ServerSocket(8889);
while (true) {
Socket accept = serverSocket.accept();
new Thread(() -> {
try (
BufferedInputStream bufferedInputStream = new BufferedInputStream(accept.getInputStream());
FileOutputStream fileOutputStream = new FileOutputStream(System.currentTimeMillis() + ".jpg");
// BufferedoutputStream
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream);
) {
byte[] bytes = new byte[1024];
int len;
while ((len = bufferedInputStream.read(bytes)) != -1) {
bufferedOutputStream.write(bytes, 0, len);
}
System.out.println("backing...");
OutputStream outputStream = accept.getOutputStream();
outputStream.write("upload".getBytes());
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}).start();
}
}
}

下面是客户端的实现:

import java.io.*;
import java.net.Socket; public class Client {
public static void main(String[] args) throws IOException {
BufferedInputStream bufferedinputStream = new BufferedInputStream(new FileInputStream("text.jpg"));
Socket socket = new Socket("localhost", 8889);
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(socket.getOutputStream()); byte[] bytes = new byte[1024];
int len;
while ((len = bufferedinputStream.read(bytes)) != -1) {
bufferedOutputStream.write(bytes,0,len);
} socket.shutdownOutput();
System.out.println("finish");
InputStream inputStream = socket.getInputStream();
byte[] back = new byte[1024];
inputStream.read(back);
System.out.println(new String(back));
inputStream.close();
socket.close();
bufferedinputStream.close();
}
}

#Java学习之路——基础阶段二(第九篇)的更多相关文章

  1. #Java学习之路——基础阶段(第九篇)

    我的学习阶段是跟着CZBK黑马的双源课程,学习目标以及博客是为了审查自己的学习情况,毕竟看一遍,敲一遍,和自己归纳总结一遍有着很大的区别,在此期间我会参杂Java疯狂讲义(第四版)里面的内容. 前言: ...

  2. #Java学习之路——基础阶段二(第三篇)

    我的学习阶段是跟着CZBK黑马的双源课程,学习目标以及博客是为了审查自己的学习情况,毕竟看一遍,敲一遍,和自己归纳总结一遍有着很大的区别,在此期间我会参杂Java疯狂讲义(第四版)里面的内容. 前言: ...

  3. #Java学习之路——基础阶段二(第一篇)

    我的学习阶段是跟着CZBK黑马的双源课程,学习目标以及博客是为了审查自己的学习情况,毕竟看一遍,敲一遍,和自己归纳总结一遍有着很大的区别,在此期间我会参杂Java疯狂讲义(第四版)里面的内容. 前言: ...

  4. #Java学习之路——基础阶段二(第十篇)

    我的学习阶段是跟着CZBK黑马的双源课程,学习目标以及博客是为了审查自己的学习情况,毕竟看一遍,敲一遍,和自己归纳总结一遍有着很大的区别,在此期间我会参杂Java疯狂讲义(第四版)里面的内容. 前言: ...

  5. #Java学习之路——基础阶段二(第八篇)

    我的学习阶段是跟着CZBK黑马的双源课程,学习目标以及博客是为了审查自己的学习情况,毕竟看一遍,敲一遍,和自己归纳总结一遍有着很大的区别,在此期间我会参杂Java疯狂讲义(第四版)里面的内容. 前言: ...

  6. #Java学习之路——基础阶段二(第七篇)

    我的学习阶段是跟着CZBK黑马的双源课程,学习目标以及博客是为了审查自己的学习情况,毕竟看一遍,敲一遍,和自己归纳总结一遍有着很大的区别,在此期间我会参杂Java疯狂讲义(第四版)里面的内容. 前言: ...

  7. #Java学习之路——基础阶段二(第六篇)

    我的学习阶段是跟着CZBK黑马的双源课程,学习目标以及博客是为了审查自己的学习情况,毕竟看一遍,敲一遍,和自己归纳总结一遍有着很大的区别,在此期间我会参杂Java疯狂讲义(第四版)里面的内容. 前言: ...

  8. #Java学习之路——基础阶段二(第五篇)

    我的学习阶段是跟着CZBK黑马的双源课程,学习目标以及博客是为了审查自己的学习情况,毕竟看一遍,敲一遍,和自己归纳总结一遍有着很大的区别,在此期间我会参杂Java疯狂讲义(第四版)里面的内容. 前言: ...

  9. #Java学习之路——基础阶段二(第四篇)

    我的学习阶段是跟着CZBK黑马的双源课程,学习目标以及博客是为了审查自己的学习情况,毕竟看一遍,敲一遍,和自己归纳总结一遍有着很大的区别,在此期间我会参杂Java疯狂讲义(第四版)里面的内容. 前言: ...

随机推荐

  1. rnandroid环境搭建

    react-native 环境搭建具体步骤这个大家已经玩烂了,这个主要是记录下来自己做win7系统遇到的坑 1.com.android.ddmlib.installexception 遇到这个问题,在 ...

  2. C语言 多线程测试

    1.CreateThread 在主线程的基础上创建一个新线程 2.WaitForMultipleObjects 主线程等待子线程 3.CloseHandle 关闭线程 // testThread.cp ...

  3. 最适合和最不适合新手使用的几款 Linux 发行版

    大多数知名的Linux发行版都属于"比较容易使用"这一类.一些观察人士可能会驳斥这个观点,但事实上,说到Linux,大多数并非从事IT或软件开发工作的人会被最容易的使用体验所吸引. ...

  4. form表单回车提交

    当form中只有一个input[type="text"](其他的表单元素可以随意有)的输入框时候,当input[type="text"]获得焦点的时候,无论表单 ...

  5. Unity3D脚本语言UnityScript初探

    译者注: Unity3D中支持三种语言:JavaScript.C#.Boo,很多人不知道如何选择,通过这篇译文,我们可以搞清楚这三者语言的来龙去脉,对选择主语言有一定的借鉴意义. 首先,Unity是基 ...

  6. 换SSD硬盘,重装系统,一阵子忙乱

    许久没重装过系统了,低声下气地问老板要了一块SSD硬盘,不马上安装上手痒得难受,但年底这个时候重装系统绝对忙乱,差点耽误了一份申请表和一份培训记录表.   SSD安装:先从网上找相关贴子,最主要的一个 ...

  7. 如何优化C语言代码(程序员必读)

    1.选择合适的算法和数据结构 应该熟悉算法语言,知道各种算法的优缺点,具体资料请参见相应的参考资料,有很多计算机书籍上都有介绍.将比较慢的顺序查找法用较快的二分查找或乱序查找法代替,插入排序或冒泡排序 ...

  8. 【转】Netty那点事(三)Channel中的Pipeline

    [原文]https://github.com/code4craft/netty-learning/blob/master/posts/ch3-pipeline.md Channel是理解和使用Nett ...

  9. http请求头响应头大全

    转:http://www.jb51.net/article/51951.htm 本文为多篇“HTTP请求头相关文章”及<HTTP权威指南>一书的阅读后个人汇总整理版,以便于理解. 通常HT ...

  10. Skin&plus;&plus; 皮肤库 CCheckListBox MFC 界面风格

    今天使用CCheckListBox,发现增加进去的字符串无法显示,但是当点击的时候,确有反应. 仔细检查代码,没有问题.之前也是这样用的,完全没有问题. 思前想后,觉得是因为使用了Skin++皮肤库, ...