Socket实现简易聊天室,Client,Server
package seday08;
import java.io.BufferedWriter;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
/**
* @author xingsir
*简易聊天室客户端
*/
public class Client {
/*
* 套接字 java.net.Socket
* Socket封装了底层TCP协议的通讯细节,使用它可以通过
* TCP协议与服务端建立链接,并以两条流进行IO操作完成 与服务端的数据交换
*/
private Socket socket;//声明了一个 Socket类型的对象
//构造方法
public Client() {
try {
System.out.println("正在连接服务器。。。。。。");
socket =new Socket("localhost",33069);//端口范围0-65535
System.out.println("已成功连接服务端!");
} catch (Exception e) {
e.printStackTrace();//输出错误堆栈信息,有助于定位并解决错误
}
}
/*
* 客户端开始工作的方法
*/
public void start() {
try {
OutputStream out = socket.getOutputStream();//客户端的Socket对象上的getOutputStream方法得到的输出流其实就是发送给服务器端的数据。
OutputStreamWriter osw= new OutputStreamWriter(out);//字符转字节流
BufferedWriter bw=new BufferedWriter(osw);//缓冲流
PrintWriter pw =new PrintWriter(bw,true);//行更新
Scanner scanner=new Scanner(System.in);//控制台输入,获取键盘输入信息
while(true) {//条件为真
String message=scanner.nextLine();
pw.println(message);
}
} catch (Exception e) {
e.printStackTrace();//输出错误堆栈信息,有助于定位并解决错误
}
}
public static void main(String[] args) {
//实例化一个客户端
Client client = new Client();
//调用启动方法
client.start();
}
}
//===================================================================================
package seday08;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
/**
* @author xingsir
* 服务器端
*/
public class Server {
private ServerSocket server;//声明了一个ServerSocket类型的对象
//构造方法
public Server() {
try{
System.out.println("服务器正在启动。。。。。。");
server = new ServerSocket(33069);//接受的端口号
System.out.println("服务端启动完毕!");
}catch (IOException e) {
e.printStackTrace();//输出错误堆栈信息,有助于定位并解决错误
}
}
//服务端工作方法
public void start() {
try {
while(true) {
System.out.println("等待客户端连接。。。。。。");
Socket socket =server.accept();//accept():接受客户端的连接请求,并返回一个套接字
System.out.println("一个客户端链接了!");
/*
* Socket提供的方法:InputStream getInputStream()
* 通过Socket获取的输入流读取的字节是来自 远端计算机发送过来的字节。
*/
InputStream in = socket.getInputStream();
//将字节转换为字符
InputStreamReader isr= new InputStreamReader(in,"UTF-8");
BufferedReader br= new BufferedReader(isr);//块读,并且可以按行读取字符串
String message = null;//声明字符串message,初始化呢为空
/*
* 通过BufferedReader读取客户端发送过来的一行字符串这个操作中,当客户端断开连接时,
* 由于 客户端系统不同,服务端这里的表现也不相同:
* windows客户端断开时,readLine方法会直接抛出异常
* linux客户端断开连接时,readLine方法会返回 为null
*/
while((message = br.readLine())!=null) {
System.out.println("来自客户端的消息说:"+message);//控制台打印消息
}
}
} catch (Exception e) {
e.printStackTrace();//输出错误堆栈信息,有助于定位并解决错误
}
}
public static void main(String[] args) {
//实例化一个server端
Server server = new Server();
server.start();//调用方法
}
}
Socket实现简易聊天室,Client,Server的更多相关文章
- PHP 操作socket 实现简易聊天室
<?php $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP ); socket_bind($socket ,'127.0.0.1', ...
- 示例:Socket应用之简易聊天室
在实际应用中,Server总是在指定的端口上监听是否有Client请求,一旦监听到Client请求,Server就会启动一个线程来响应该请求,而Server本身在启动完线程之后马上又进入监听状态. 示 ...
- Express+Socket.IO 实现简易聊天室
代码地址如下:http://www.demodashi.com/demo/12477.html 闲暇之余研究了一下 Socket.io,搭建了一个简易版的聊天室,如有不对之处还望指正,先上效果图: 首 ...
- php+websocket搭建简易聊天室实践
1.前言 公司游戏里面有个简单的聊天室,了解了之后才知道是node+websocket做的,想想php也来做个简单的聊天室.于是搜集各种资料看文档.找实例自己也写了个简单的聊天室. http连接分为短 ...
- node+websocket创建简易聊天室
关于websocket的介绍太多,在这就不一一介绍了,本文主要实现通过websocket创建一个简易聊天室,就是90年代那种聊天室 服务端 1.安装ws模块,uuid模块,ws是websocket模块 ...
- Java实现简易聊天室
Java实现简易聊天室 在学习<Java从入门到精通>这本书,网络通信,基于TCP实现的简易聊天室,我这里对书中的代码略做了修改,做个记录. 这里先放一下运行效果图,代码放在最后. 运行效 ...
- socket 建立网络连接,client && server
client代码: package socket; import java.io.IOException; import java.net.Socket; /** * 客户端_聊天室 * * @aut ...
- node.js+websocket实现简易聊天室
(文章是从我的个人主页上粘贴过来的,大家也可以访问我的主页 www.iwangzheng.com) websocket提供了一种全双工客户端服务器的异步通信方法,这种通信方法使用ws或者wss协议,可 ...
- 使用Android网络编程实现简易聊天室
在Java中我们可以利用socket编程实现聊天室,在Android中也一样,因为Android完全支持JDK本身的TCP.UDP网络通信API.我们可以使用ServerSocket.Socket来建 ...
随机推荐
- Java基础IO类之字符串流(查字符串中的单词数量)与管道流
一.字符串流 定义:字符串流(StringReader),以一个字符为数据源,来构造一个字符流. 作用:在Web开发中,我们经常要从服务器上获取数据,数据返回的格式通常一个字符串(XML.JSON), ...
- windows系统tomcat上开发的j2ee程序,如何适配linux系统上奔跑的websphere7
公司需要将几个windows系统tomcat中间件下开发的j2ee系统部署到linux系统websphere7中间件下去运行. 这就需要做系统的适配工作.由于时间比较久了,具体问题就不详细写了.把这个 ...
- webpack-优化阻塞的css
随着浏览器的日新月异,网页的性能和速度越来越好,并且对于用户体验来说也越来越重要. 现在有很多优化页面的办法,比如:静态资源的合并和压缩,code splitting,DNS预读取等等. 本文介绍的是 ...
- 使用IDEA开发Spring入门程序
使用IDEA开发Spring入门程序 前言 本文通过一个简单的入门程序向读者演示Spring框架的使用过程,具体如下: 一.使用IDEA创建Maven应用项目并导入相应模块 使用IDEA创建一个名为n ...
- 挑战10个最难的Java面试题(附答案)【下】
查看挑战10个最难的Java面试题(附答案)[上] 在本文中,我们将从初学者和高级别进行提问, 这对新手和具有多年 Java 开发经验的高级开发人员同样有益. 关于Java序列化的10个面试问题 大多 ...
- luogu P3572 [POI2014]PTA-Little Bird
题目描述 从1开始,跳到比当前矮的不消耗体力,否则消耗一点体力,每次询问有一个步伐限制,求每次最少耗费多少体力 单调队列优化动态规划 #include<cstdio> #include&l ...
- Xcode9 gitHub管理代码
https://www.raywenderlich.com/153084/use-git-source-control-xcode-9 首先上一个参考链接 在xcode9 创建工程时勾选git管理.利 ...
- 第四章 JavaScript对象及初始面向对象
创建对象: //方式一 var ower=new Object(); ower.name="长春花"; ower.genera="夹竹挑科 长春花属"; owe ...
- CSU-2018
The gaming company Sandstorm is developing an online two player game. You have been asked to impleme ...
- 用.NET模拟天体运动
用.NET模拟天体运动 这将是一篇罕见而偏极客的文章. 我上大学时就见过一些模拟太阳系等天体运动的软件和网站,觉得非常酷炫,比如这个(http://www.astronoo.com/en/articl ...