我的学习阶段是跟着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. Centos7查看IP

    查看IP ip addr : lo: <LOOPBACK,UP,LOWER_UP> mtu qdisc noqueue state UNKNOWN qlen link/loopback : ...

  2. BigDecimal常用的加减乘除算法、比较大小、保存两位小数点

    项目中涉及到了BigDecimal的加.减.乘.比较大小.精确度的问题.所以在此总结一下,方便以后复习. //加法 BigDecimal coins = new BigDecimal("0& ...

  3. SpringMVC+GSON 对象序列化--日期格式的处理

    Gson异常强大因此使用它代替了Jackson作为SpringMVC消息转换器. 在自己的项目中,发现对象在序列化后,日期格式出现了问题. 先看问题 在员工表中有一列是生日,字段类型为Date,也就是 ...

  4. 整理Cocos2d-x 面试题解

    昨天听了腾讯2015校招的在线宣讲会,看到了游戏技术大拿Steven,他总结了需要的达人得爱技术,能坚持,够挑剔.马上校招了,加油吧,骚年~ 网上关于cocos2d-x的面试题比较少,这里搜集和整理了 ...

  5. Windows下Oracle的下载与安装

    一.Oracle下载 官网地址:http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html 百 ...

  6. ubuntu16+zabbix3.4+grafana环境搭建记录

    最近研究了zabbix,稍后放上环境搭建教程,建议想学习搭建的同学记得参考zabbix官网

  7. esayui扩展验证方法

    下面是关于平时中积累的esayui扩展验证方法仅作记录:       /**************************************************************** ...

  8. Python_Excel文件操作

    ''' 使用xlrd模块写入Excel文件 ''' import xlrd book=xlrd.open_workbook(r'/Users/c2apple/Desktop/纪录/测试报告/张涛文件盘 ...

  9. RedHat Linux下iptables防火墙设置

    一般情况下iptables已经包含在Linux发行版中.运行 # iptables --version 来查看系统是否安装iptables 启动iptables:# service iptables ...

  10. Tiny4412之外部中断

    一:外部中断 在之前我们学习按键驱动的时候,我们检测按键有没有按下是通过轮循的方式(也就是我们说的死循环),这样虽然可以检测实现按键,但太浪费系统资源了,不论我们按键中断有没有发生,cpu都要一直进行 ...