一、TCP/IP协议

1、TCP/IP协议包括TCP、IP和UDP等

2、域名通过dns服务器转换为IP地址

3、局域网可以通过IP或者主机地址寻找到相应的主机

4、TCP是可靠的连接,效率低,且连接是一对一,TCP;而UDP是不可靠连接,容易丢失数据,但是效率高,且连接是一对多。

二、端口号

1、端口号唯一确定服务器中的某个应用

2、一台服务器不允许存在两个相同端口号的应用

3、IP:port唯一确定服务器应用程序

4、https的默认端口为443,http为80,https是http的加密和解密的升级版

三、Socket

1、客户端应用程序与Port间使用Socket连接,打个比方,客户端应用程序比作家用电器,Port的IO流比作电流,那么Socket就是插座,家用电器只有将电线插到插座上才能通电

2、服务端与Port间使用ServerSocket连接

3、只要获得了Socket实例,就有了IO流

四、InetAddress类

public class TestTcp {
public static void main(String[] args) {
try {
InetAddress localHost = InetAddress.getLocalHost();
System.out.println(localHost.getHostName());//获取主机名
System.out.println(localHost.getHostAddress());//获取主机地址 localHost = InetAddress.getByName("baidu.com");
System.out.println(localHost.getHostName());
System.out.println(localHost.getHostAddress()); } catch (UnknownHostException e) {
e.printStackTrace();
}
}
}

五、简易聊天室

本聊天室包括一个服务端和n个客户端,客户端向服务端发送消息,服务端再将该消息群发给除了它们本身的其它客户端。

想要发消息,必须要拥有IO流,想要IO流就必须拥有Socket,另外有谁的Socket就可以向谁发消息。



聊天室代码如下:



import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner; public class TalkTool {
} //服务端
class ServerT{
public static void main(String[] args) {
try { ServerSocket serverSocket = new ServerSocket(9014);//建立服务端套接字与端口关联
System.out.println("服务端启动成功,等待客户端连接");
List<Socket> socketList = new ArrayList<>();
while (true) {
//主线程只负责客户端连接
Socket socket = serverSocket.accept();//等待客户端连接(阻塞状态)
System.out.println("有客户端连入");
socketList.add(socket);
new Thread(new ForwardT(socket,socketList)).start(); } } catch (IOException e) {
e.printStackTrace();
} }
} //客户端
class ClientT{
public static void main(String[] args) { try {
Socket socket = new Socket("192.168.226.1",9014);//建立连接,IP地址根据实际情况设置
System.out.println("客户端与服务端建立了连接");
OutputStream outputStream = socket.getOutputStream();
PrintWriter printWriter = new PrintWriter(new OutputStreamWriter(outputStream),true);
Scanner scanner = new Scanner(System.in);
//独立线程负责接收消息
new Thread(new ReceveT(socket)).start();
while (true) { printWriter.println(scanner.next()); } } catch (IOException e) {
e.printStackTrace();
} }
} //服务端转发线程
class ForwardT implements Runnable{
private Socket socket;
private List<Socket> socketList;
public ForwardT(Socket socket,List<Socket>socketList){
this.socket=socket;
this.socketList=socketList; }
@Override
public void run() { try {
while (true) {
InputStream inputStream = socket.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String msg = bufferedReader.readLine();
System.out.println(msg); for (Socket sk:socketList
) {
if (sk!=socket){//把自己排除掉
//发送给其它客户端,必须要有其它客户端的Socket
OutputStream outputStream = sk.getOutputStream();
PrintWriter printWriter = new PrintWriter(new OutputStreamWriter(outputStream),true); printWriter.println(socket+"说:"+msg);
}
} }
} catch (IOException e) {
e.printStackTrace();
} }
} //客户端接收线程
class ReceveT implements Runnable{
private Socket socket; public ReceveT(Socket socket){
this.socket=socket; }
@Override
public void run() { try {
while (true) {
InputStream inputStream = socket.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
System.out.println("服务端返回"+bufferedReader.readLine()); }
} catch (IOException e) {
e.printStackTrace();
} }
}

学习JavaSE TCP/IP协议与搭建简易聊天室的更多相关文章

  1. php+websocket搭建简易聊天室实践

    1.前言 公司游戏里面有个简单的聊天室,了解了之后才知道是node+websocket做的,想想php也来做个简单的聊天室.于是搜集各种资料看文档.找实例自己也写了个简单的聊天室. http连接分为短 ...

  2. Python开发【笔记】:aiohttp搭建简易聊天室

    简易聊天室: 1.入口main.py import logging import jinja2 import aiohttp_jinja2 from aiohttp import web from a ...

  3. 使用Html5下WebSocket搭建简易聊天室

    一.Html5WebSocket介绍 WebSocket protocol 是HTML5一种新的协议(protocol).它是实现了浏览器与服务器全双工通信(full-duplex). 现在,很多网站 ...

  4. TCP/IP协议学习之实例ping命令学习笔记

    TCP/IP协议学习之实例ping命令学习笔记(一) 一. 目的为了让网络协议学习更有效果,在真实网络上进行ping命令前相关知识的学习,暂时不管DNS,在内网中,进行2台主机间的ping命令的整个详 ...

  5. TCP/IP协议分析

    一;前言 学习过TCP/IP协议的人多有一种感觉,这东西太抽象了,没有什么数据实例,看完不久就忘了.本文将介绍一种直观的学习方法,利用协议分析工具学习TCP/IP,在学习的过程中能直观的看到数据的具体 ...

  6. TCP/IP协议分析(推荐)

    一;前言 学习过TCP/IP协议的人多有一种感觉,这东西太抽象了,没有什么数据实例,看完不久就忘了.本文将介绍一种直观的学习方法,利用协议分析工具学习TCP/IP,在学习的过程中能直观的看到数据的具体 ...

  7. TCP /IP协议详解【转】

    转自:https://www.jianshu.com/p/0cf648510bce?utm_campaign=maleskine&utm_content=note&utm_medium ...

  8. TCP/IP协议概要--01

    学习一下tcp/ip协议,还是很枯燥,哎..... 图片的是从下到上对TCP/IP的协议进行描述的.主要是的描述每一层协议的特点 该层对应的是最底层的数据链路层,即图中的以太网驱动程序那一层. 该层是 ...

  9. ASP.NET MVC WebApi 返回数据类型序列化控制(json,xml) 用javascript在客户端删除某一个cookie键值对 input点击链接另一个页面,各种操作。 C# 往线程里传参数的方法总结 TCP/IP 协议 用C#+Selenium+ChromeDriver 生成我的咕咚跑步路线地图 (转)值得学习百度开源70+项目

    ASP.NET MVC WebApi 返回数据类型序列化控制(json,xml)   我们都知道在使用WebApi的时候Controller会自动将Action的返回值自动进行各种序列化处理(序列化为 ...

随机推荐

  1. 简易的canvas画板

    没事仿照windows画板工具用canvas实现了一个简易版的画板. html: <!doctype html> <html> <head> <meta ch ...

  2. ORA-00054 资源正忙

    现象: 执行update.truncate提示 ORA-00054: resource busy and acquire with NOWAIT specified. 解决方法: 因为系统是RAC系统 ...

  3. SystemLogParser ArcGIS Server运维工程师的好助手

    单位使用ArcGIS Server发布了众多GIS服务,作为系统运维工程师,一直希望能有一种便捷的方式能获得服务的访问情况,Esri推出的SystemLogParser这款小程序就是不错的辅助工具,而 ...

  4. Date()对象的设置与解析

    怎么获取当前时间? 怎么给Date对象设置特定时间? 将Date对象解析为毫秒数? 将Date对象解析为日月年?获取小时/分钟/秒? 直接new Date()新建对象,可以获取当前时间的Date对象: ...

  5. 1finally与return、exit()

    public class TestException { public static void main(String[] args) { String[] str = {"1", ...

  6. LGWR和DBWn的触发条件

    Rolling Forward(前滚) Oracle启动实例并加载数据库,然后通过Online Redologs中的重做日志,重现实例崩溃前对数据库的修改操作.在恢复过程中对于已经提交的事务,但尚未写 ...

  7. Phoenix介绍(持续更新)

    现有hbase的查询工具有很多如:Hive,Tez,Impala,Shark/Spark,Phoenix等.今天主要记录Phoenix. phoenix,中文译为“凤凰”,很美的名字.Phoenix是 ...

  8. Azure 镜像市场发布商指南

    Azure 镜像市场发布商指南 本指南提供独立软件供应商产品上架到 Azure 镜像市场(以下简称 Azure 镜像市场)需要遵循的全流程. 文档适用范围 本指南适用于希望通过由世纪互联运营的Micr ...

  9. 关于easyUI分页

    首先前台会传来两个参数,分别是rows(一页数据的大小,即一页有多少条数据)和page(第几页),根据这两个参数可以计算出从数据库中从第几 条数据开始取和要取多少条数据.数据取出来后,因为easyUI ...

  10. RHEL7:如何配置I / O调度程序

    介绍 I / O调度程序用于优化磁盘上的读/写. RHEL 7中有三种类型的I / O调度程序(也称为I / O电梯): CFQ(C fullly F air Q ueuing)促进来自实时流程的I ...