一、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. Mysql InnoDB的四个事务隔离级别和(分别逐级解决的问题)脏读,不可重复读,虚读

    MySqlInnoDB的事务隔离级别有四个:(默认是可重复读repeatable read) 未提交读 read uncommit : 在另一个事务修改了数据,但尚未提交,在本事务中SELECT语句可 ...

  2. Django 模板继承extend 标签include block

    # block 站网页位置# includ 导入网页标签# extends 导入网页模板 # common_js.html <script src="/static/plugins/j ...

  3. Two tomcat 冲突

    一.一般修改 路径: /opt/apache-tomcat/conf/server.xml 1.第一个tomcat使用默认配置 2.第二个tomcat一般配置 二.特殊修改 1.第二个tomcat特殊 ...

  4. SQL Server 登录名、用户、角色与权限

    1.在SQL Server中,用户和角色是分为服务器级别和数据库级别的 2.服务器级别 登录名:指有权限登录到某服务器的用户,例如超级管理员的登录名是sa: 登录名具体位置在  数据库——>安全 ...

  5. MySQL: OPTIMIZE TABLE: Table does not support optimize, doing recreate + analyze instead

    show create table history;-------------------------- CREATE TABLE `foo` (  `itemid` bigint(20) unsig ...

  6. pycharm something

    e1:使用的版本2016.3 发现无法执行py程序,执行菜单为灰色.选择py为2.7. e2:使用过jython可以运行,但是语法有问题str.formate无法执行

  7. linux下手动安装git教程

    Git是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理.而国外的GitHub和国内的Coding都是项目的托管平台.但是在使用git工具的时候,第一步要学会如何安装gi ...

  8. C 转义字符说明

    %a(%A) 浮点数.十六进制数字和p-(P-)记数法(C99)%c 字符%d 有符号十进制整数%f 浮点数(包括float和doulbe)%e(%E) 浮点数指数输出[e-(E-)记数法]%g(%G ...

  9. (转)透明光照模型与环境贴图之基础理论篇(折射率、色散、fresnel定律) .

     摘抄“GPU Programming And Cg Language Primer 1rd Edition” 中文名“GPU编程与CG语言之阳春白雪下里巴人” 材质和光的交互除了反射现象,对于透明物 ...

  10. layer的alert图

    layer.alert("xxx",1); 1 2 3 4 5 6 7 8 9 10 11   12 13 14 15 16 17 及以后