0.前言

  其实大概半年前就已经看过网络编程Socket的知识了(传统IO),但是因为长时间的不使用导致忘的一干二净,最近正好准备校招,又重新看了网络编程这一章,
  是传统IO(BIO)相关的内容,故在此记录!!记完笔记就去看nio的网络编程啦!!!

1.基础概念

首先看一下socket单词的翻译:
  socket n. 插座;窝,穴;牙槽   IP: 电脑的身份证
  
  端口号: 识别你电脑上的不同程序 场景: 小宇用电脑QQ发消息问小燕吃饭了没,小燕说吃了哦。
    为啥子小宇发消息,是小燕收到,而不是小红小白收到,
        这个就是IP这位大哥的作用啦,小宇给消息加上了IP,在广阔的网络中,消息小弟根据IP大哥的引路找到了小燕的电脑。     再问:为啥是小燕的QQ收到了消息,而不是小燕的谷歌浏览器收到消息,这时候端口大哥就可以出场了,
       消息到了小燕电脑,IP大哥就不管事了,由端口号大哥引路找到了QQ这个程序
  

  socket百度是这样定义的

    网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。

    那么简单理解下: 也就是每个程序上都有一个插座,只要我们用一根有双向插头的线(得给这个线加上IP和端口号哦),哐,一连,这两个程序就可以互相交流啦。

    当然连接的时候需要经过三次挥手,释放的时候需要进过四次挥手。 最近在重温计算机网络,这部分以后再加上去哈!

2.简单的示例

  首先服务端需要暴露出一个端口 也可以说监听一个端口,客户端根据IP和端口进行连接,服务器接收到了这个连接请求,同意,再创建一个Socket和那个客户端的Socket进行连接。

  

  客户端:连接得需要ip地址和端口吧,顺便发送点什么。

package com.socket;

import java.io.OutputStream;
import java.net.Socket; public class TCPClient {
public static void main(String[] args) throws Exception {
//系统随机选择一个端口 连接指定的ip地址和端口
Socket socket = new Socket("127.0.0.1", 8888);
OutputStream os = socket.getOutputStream();
os.write("吃了嘛".getBytes());
os.close();
socket.close();
}
}

  服务器端:服务器首先也得搞个插头,但是他不是谁想连就可以连,这样太不合理,别人连了得先得到服务器端得同意

  

package com.socket;

import java.net.ServerSocket;
import java.net.Socket; public class TCPServer {
public static void main(String[] args) throws Exception {
//Server起一个插座(套接字)监听一个连接
ServerSocket serverSocket = new ServerSocket(8888);
//服务器端总不能停吧,写一个死循环
while (true) {
//serverSocket获得同意,再建立一个socket
Socket socket = serverSocket.accept();
System.out.println("client is connect!!!!!");
}
}
}

3.破产版Tomcat

  客户端:浏览器

  服务端:MyTomcat , 因为要在浏览器中显示所以必须要弄成HTTP协议的。所以这里封装了两个类,分别是Request和Reponse。

  因为是破产版的 所以下面这张图的很多功能都没实现!!! 而且在NIO的网络模型中应该不是利用InputStream获得请求报文了

  

  

package com.socket.tomcat;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader; public class Request { //请求方法
private String method; private String url; public Request(InputStream inputStream) throws Exception {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "utf-8"));
String[] input = bufferedReader.readLine().split(" ");
this.method = input[0];
url = input[1];
} public String getMethod() {
return method;
} public void setMethod(String method) {
this.method = method;
} public String getUrl() {
return url;
} public void setUrl(String url) {
this.url = url;
}
}
package com.socket.tomcat;

import java.io.OutputStream;

public class Reponse {
private OutputStream outputStream; public static String repsonsedHead = "HTTP/1.1 200 \r\n" + "Content-Type:text/html\r\n" + "\r\n"; public Reponse(OutputStream outputStream) {
this.outputStream = outputStream;
} public void write(String msg) throws Exception {
outputStream.write((repsonsedHead + msg).getBytes());
}
}
package com.socket.tomcat;

import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket; public class MyTomcat { public static void main(String[] args) throws Exception { ServerSocket serverSocket = new ServerSocket(8080); while (true) {
Socket socket = serverSocket.accept(); InputStream is = socket.getInputStream();
//获得请求
Request request = new Request(is); System.out.println("请求方法:" + request.getMethod());
System.out.println("请求路径:" + request.getUrl()); OutputStream os = socket.getOutputStream();
Reponse reponse = new Reponse(os);
reponse.write("Java!"); is.close();
os.flush();
os.close();
socket.close(); } }
}

Java Socket网络编程学习笔记(一)的更多相关文章

  1. JAVA UDP网络编程学习笔记

    一.UDP网络编程概述 采用TCP协议通信时,客户端的Socket必须先与服务器建立连接,连接建立成功后,服务器端也会持有客户端连接的Socket,客户端的Socket与服务器端的Socket是对应的 ...

  2. JAVA TCP网络编程学习笔记

    一.JAVA网络编程概述 网络应用程序,就是在已实现网络互联的不同计算机上运行的应用程序,这些程序之间可以相互交换数据.JAVA是优秀的网络编程语言,Java网络编程的类库位于java.net包中.J ...

  3. 转 网络编程学习笔记一:Socket编程

    题外话 前几天和朋友聊天,朋友问我怎么最近不写博客了,一个是因为最近在忙着公司使用的一些控件的开发,浏览器兼容性搞死人:但主要是因为这段时间一直在看html5的东西,看到web socket时觉得很有 ...

  4. Java Socket 网络编程心跳设计概念

    Java Socket 网络编程心跳设计概念   1.一般是用来判断对方(设备,进程或其它网元)是否正常动行,一 般采用定时发送简单的通讯包,如果在指定时间段内未收到对方响应,则判断对方已经当掉.用于 ...

  5. Java网络编程学习笔记

    Java网络编程,我们先来看下面这一张图: 由图可得:想要进行网络编程,首先是服务器端通过ServerSocket对某一个端口进行监听.通过accept来判断是否有客户端与其相连.若成功连上,则通过r ...

  6. 网络编程学习笔记(二)基于TCP的Socket编程

    1.Socket:英文意思插座.两个Java应用程序可以通过一个双向的网络通信连接实现数据交换,这个双向链路的一端称为一个Socket. 2.Socket通常用来实现client-server(客户端 ...

  7. 网络编程学习笔记:Socket编程

    文的主要内容如下: 1.网络中进程之间如何通信? 2.Socket是什么? 3.socket的基本操作 3.1.socket()函数 3.2.bind()函数 3.3.listen().connect ...

  8. 网络编程学习笔记一:Socket编程

    “一切皆Socket!” 话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的socket. ——有感于实际编程和开源项目研究. 我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览 ...

  9. 网络编程学习笔记--1.socket可读可写条件

    转至 :http://blog.csdn.net/majianfei1023/article/details/45788591 socket可读可写条件,经常做为面试题被问,因为它考察被面试者对网络编 ...

随机推荐

  1. C语言复习1_变量与数据类型

    变量命名规则: 1.变量名的首字母或下划线(不能是其他特殊符号) 2.变量名的其他字母包含下划线.数字 和字母 3.不能使用关键字 基本数据类型 分为数值型和非数值型,其中数值型分为整型和非整型 整型 ...

  2. 适配iOS11

    总结在iOS11系统中出现的适配问题: 启动app发现上下有空隙,不能完全贴合屏幕----- 解决方案:添加一张尺寸为1125x2436的启动图. 隐藏导航栏的界面,会出现无法贴合屏幕顶部(一般来说, ...

  3. [tkinter]Radiobutton单选按钮的使用

    首先因为单选按钮有一个特性(一个被选中后,自动清除其它按钮的选中状态) 所以使用方式也有点不同 错误示例 from tkinter import * root = Tk() r1 = Radiobut ...

  4. 关于Java 去除空格,换行的代码

    public static String replaceBlank(String str) { String dest = ""; if (str != null) { //Pat ...

  5. 反爬虫:利用ASP.NET MVC的Filter和缓存(入坑出坑)

    背景介绍: 为了平衡社区成员的贡献和索取,一起帮引入了帮帮币.当用户积分(帮帮点)达到一定数额之后,就会“掉落”一定数量的“帮帮币”.为了增加趣味性,帮帮币“掉落”之后所有用户都可以“捡取”,谁先捡到 ...

  6. 图片转web字体库,如何制作web字体库

    最近项目上用到了很多svg图,设计师经常频繁改版,苦不堪言,于是就想到了把图片转成字体库来使用. 使用图片的缺点: 1. 图片加载速度慢 2. 图片大小固定,无法调节 3. 当代码重构或者图片目录位置 ...

  7. Asp.Net Core中使用Swagger,你不得不踩的坑

    很久不来写blog了,换了新工作后很累,很忙.每天常态化加班到21点,偶尔还会到凌晨,加班很累,但这段时间,也确实学到了不少知识,今天这篇文章和大家分享一下:Asp.Net Core中使用Swagge ...

  8. [Swift]LeetCode144. 二叉树的前序遍历 | Binary Tree Preorder Traversal

    Given a binary tree, return the preorder traversal of its nodes' values. Example: Input: [1,null,2,3 ...

  9. [Swift]LeetCode707. 设计链表 | Design Linked List

    Design your implementation of the linked list. You can choose to use the singly linked list or the d ...

  10. [Swift]LeetCode884. 两句话中的不常见单词 | Uncommon Words from Two Sentences

    We are given two sentences A and B.  (A sentence is a string of space separated words.  Each word co ...