网络编程(学习整理)---1--(Tcp)实现简单的控制台聊天室
1、简单的聊天室(控制台):
功能实现:
客户端和服务端的信息交流:
2、牵扯到的知识点:
这个我大概说一下,详细后面见代码!
1) 网络通讯的三要素
1. IP
2. 端口号。
3. 协议
2) InetAddress(IP类)
常用的方法:
getLocalHost(); 获取本机的IP地址
getByName("IP或者主机名") 根据一个IP地址的字符串形式或者是一个主机名生成一个IP地址对象。 (用于获取别人的IP地址对象)
getHostAddress() 返回一个IP地址的字符串表示形式。
getHostName() 返回计算机的主机名
3) 端口号是没有类描述的。
端口号的范围: 0~65535
从0到1023,系统紧密绑定于一些服务。
1024~65535 我们可以使用....
4) 网络通讯的协议:
udp通讯协议
tcp通讯协议。
5)TCP
(1)TCP通讯协议特点:
1. tcp是基于IO流进行数据 的传输 的,面向连接。
2. tcp进行数据传输的时候是没有大小限制的。
3. tcp是面向连接,通过三次握手的机制保证数据的完整性。 可靠协议。
4. tcp是面向连接的,所以速度慢。
5. tcp是区分客户端与服务端 的。
比如: 打电话、 QQ\feiQ的文件传输、 迅雷下载....
(2) tcp协议下的Socket:
Socket(客户端) , tcp的客户端一旦启动马上要与服务端进行连接。
ServerSocket(服务端类)
(3) tcp的客户端使用步骤:
1. 建立tcp的客户端服务。
2. 获取到对应的流对象。
3. 写出或读取数据
4. 关闭资源。
3、下面直接贴上我测试的代码:
客户端代码:
package cn.chating; import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException; /**
* 聊天:客户端
* @author 小风微灵
*
*/
public class ChatClient { public static void main(String[] args) throws Exception { //建立客户端
Socket client=new Socket("192.168.9.122",22222);
/***********************************io start **************************************/
//得到输入的字符流对象
BufferedReader reader=new BufferedReader(new InputStreamReader(client.getInputStream())); //得到输出的字符流对象
BufferedWriter writer=new BufferedWriter(new OutputStreamWriter(client.getOutputStream())); //得到键盘输入流
BufferedReader keywrite=new BufferedReader(new InputStreamReader(System.in)); String content=null; String get=null; System.err.println("请输入要发送的信息:"); while((content=keywrite.readLine())!=null){ //向服务端发送信息 writer.write("客户端说:"+content);
writer.newLine(); //换行
writer.flush(); //发送 //接收服务端的信息
if((get = reader.readLine())!=null){
System.out.println("服务端说:"+get);
}
}
/***********************************io end **************************************/
//关闭资源
client.close();
} }
服务端代码:
package cn.chating; import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket; /**
* 聊天:
* 一问一答的服务端
* @author 小风微灵
*
*/
public class ChatServer { public static void main(String[] args) throws Exception{ //建立socket服务端
ServerSocket server = new ServerSocket(22222); //阻塞型的方法, 等待接收客户端的 连接
Socket rsocket =server.accept(); /***********************************io start **************************************/
//读取已连接的客户端发送的信息 输入字节流
InputStream is = rsocket.getInputStream(); //得到输入的缓冲字符流对象
BufferedReader reader = new BufferedReader(new InputStreamReader(is)); //得到输出的字符流对象
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(rsocket.getOutputStream())); //得到键盘的输入流
BufferedReader keyReader = new BufferedReader(new InputStreamReader(System.in)); String content = null; String send = null; while((content = reader.readLine()) != null){ System.out.println("服务端接收到:"+content); //键盘挂起, 一次
if((send = keyReader.readLine()) != null){
writer.write(send);
writer.newLine();//换行
writer.flush();//发送
}
}
/***********************************io end **************************************/ //关闭资源
rsocket.close();
} }
网络编程(学习整理)---1--(Tcp)实现简单的控制台聊天室的更多相关文章
- 66 网络编程(五)——TCP多线程实现多人聊天室
思路 客户端读写各一个类,可以使内部类,实现Runnable.读写类都与服务器端建立连接,一个收,一个发. 客户端实现接收和转发.多线程实现每个客户端的连接(使与各客户端的连接独立). 服务器端中创建 ...
- 网络编程(学习整理)---2--(Udp)实现简单的控制台聊天室
1.UDP协议: 总结一下,今天学习的一点知识点! UDP也是一种通信协议,常被用来与TCP协议作比较!我们知道,在发送数据包的时候使用TCP协议比UDP协议安全,那么到底安全在哪里呢?怎么理解呢! ...
- C#网络编程学习(4)---Socket Tcp进阶之 使用异步循环接收客户端连接和信息
1.方法介绍 BeginAccept(AsyncCallback callback, object state); 异步开始监听客户端连接. callback为一个委托,在成功接收客户端连接时调用委托 ...
- Java网络编程Demo,使用TCP 实现简单群聊功能Groupchat,创建一个服务端,使多个客户端都能收到消息
效果图: 开启服务端 客户端一 客户端二 客户端三 实现代码: 客户端类 import java.io.IOException; import java.net.ServerSocket; impor ...
- Java网络编程Demo,使用TCP 实现简单群聊功能GroupchatSimple,多个客户端输入消息,显示在服务端的控制台
效果: 服务端 客户端 实现代码: 服务端 import java.io.IOException; import java.net.ServerSocket; import java.net.Sock ...
- 网络编程应用:基于TCP协议【实现一个聊天程序】
要求: 基于TCP协议实现一个聊天程序,客户端发送一条数据,服务器端发送一条数据 客户端代码: package Homework1; import java.io.IOException; impor ...
- Windows平台VC++ 6.0 下的网络编程学习 - 简单的测试winsock.h头文件
最近学习数据结构和算法学得有点累了(貌似也没那么累...)...找了本网络编程翻了翻当做打一个小基础吧,打算一边继续学习数据结构一边也看看网络编程相关的... 简单的第一次尝试,就大致梳理一下看书+自 ...
- c++ 网络编程(一)TCP/UDP windows/linux 下入门级socket通信 客户端与服务端交互代码
原文作者:aircraft 原文地址:https://www.cnblogs.com/DOMLX/p/9601511.html c++ 网络编程(一)TCP/UDP 入门级客户端与服务端交互代码 网 ...
- C,C++网络编程学习简明指南
C,C++网络编程学习简明指南 1. 扎实的C,C++基础知识 参考资料<C程序设计>,<C++ primer>. 2. TCP/IP协议 经典书是:W.Richard Ste ...
随机推荐
- dpkg error
在ubuntu乱搞,突然出现错误 dpkg: error: cannot read info directory: No such file or directory E: Sub-process / ...
- bzoj2466,poj1222
都是简单的异或高斯消元 由于bzoj2466要求解得最小和,所以我们最后还要穷举自由元取最优解 type node=record po,next:longint; end; . ...
- 对于利用pca 和 cca 进行fmri激活区识别的理解
1.pca 抛开fmri研究这个范畴,我们有一个超长向量,这个超长向量在fmri研究中,就是体素数据.向量中的每个数值,都代表在相应坐标轴下的坐标值.这些坐标轴所组成的坐标系,其实是标准单位坐标系.向 ...
- Spring MVC中DispatcherServlet工作原理探究
转:http://blog.csdn.net/zhouyuqwert/article/details/6853730 下面类图将主要的类及方法抽离出来,以便查看方便,根据类的结构来说明整个请求是如何工 ...
- unity3d Realistic eye shading 真实的眼睛渲染
先放上效果 人皮都做了,当然要来研究下眼睛,眼睛要比人体皮肤简单一些(实时模拟人皮在此) 一看是不是很复杂 这是眼睛的解构,但是,我们只需要模拟出虹膜巩膜和角膜就能达到相当真实的眼睛 巩膜就是白眼球 ...
- MT9M021/MT9M031总结
MT9M021/MT9m031在低光照度下和捕捉移动场景有非常优异的表现,属于近红外摄像头, S1: Aptina's MT9M021/MT9M031 sensor is capable of a m ...
- 《Numerical Methods》-chaper4-一元非线性方程的解
在许多生产时间问题中,我们根据已知条件往往会列出一个一元非线性方程,一个最典型的例子就是银行存款的问题,由于其利息需要基于前一年的本息和,因此列出来的方程x的指数往往是高次的.还有物理问题当中一系列用 ...
- UVa 10029 hash + dp
题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- OpenSource
SugarCRM 客户关系管理系统(CRM).SugarCRM开源版是一款完全开放源代码的商业开源软件 OPENFILER 基于浏览器的免费网络存储管理实用程序,可以在单一框架中提供基于文件的网络连接 ...
- hdoj 1686 Oulipo【求一个字符串在另一个字符串中出现次数】
Oulipo Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...