使用socket实现聊天功能
public class Service { //服务器
public static void main(String[] args) {
ServerSocket serverSocket=null;
Socket socket=null;
//既然是 双方的通信 输入和输出流 必须有
OutputStream os=null;
InputStream is=null;
BufferedReader br=null;
byte [] buf=new byte[1024];
int say;
String word=null;
try {
serverSocket=new ServerSocket(8800);
while(true){ //始终保持 畅通
socket=serverSocket.accept();
//实现多个窗口聊天
ThreadSocket socket2=new ThreadSocket(socket);
socket2.start();
/*//打开所有的输入输出流
is=socket.getInputStream();
os=socket.getOutputStream();
//接收客户端的信息
say=is.read(buf);
if (say!=0) {
word =new String(buf, 0, say);
}
System.out.println(word);
//给客户的回应
System.out.println("====请您输入需要回复的信息====");
br=new BufferedReader(new InputStreamReader(System.in));
os.write(br.readLine().getBytes()); //保证都是 最新的回复
*/ }
} catch (IOException e) {
e.printStackTrace();
} finally{
try {
br.close();
os.close();
is.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
服务器端代码
public class ThreadSocket extends Thread {
//相当于每一个单独的窗口
Socket socket = null;
public ThreadSocket(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
String words = null;
int say;
InputStream is = null;
OutputStream os = null;
byte[] rece = new byte[1000];
try {
//打开需要的 输入 输出流
is = socket.getInputStream();
os = socket.getOutputStream();
say = is.read(rece);// 接受客户端消息
if (say != 0)
words = new String(rece, 0, say);
System.out.println(words);
BufferedReader bufferreader = new BufferedReader(
new InputStreamReader(System.in));
os.write(("服务器====" + bufferreader.readLine()).getBytes());// 返回给客户端的响应
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
is.close();
os.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
线程类
public class Client { //客户端
public static void main(String[] args) {
Socket socket=null;
//既然是 双方的通信 输入和输出流 必须有
OutputStream os=null;
InputStream is=null;
InputStreamReader reader=null;
byte [] buf=new byte[1024];
int say;
String word=null;
String server=null;
String address=null;
InetAddress host=null;
try {
System.out.println("亲爱的用户:请您输入服务器的ip地址:");
reader=new InputStreamReader(System.in);
word=new BufferedReader(reader).readLine(); //获取用户的输入IP
if (word!="") {
address=word; //
}
//开始和服务器 交流
System.out.println("=======说出您想提问的问题=======");
reader=new InputStreamReader(System.in);
while(true){
word=new BufferedReader(reader).readLine();// 获取用户想说的话
server=word;
//获取本机的IP
host = InetAddress.getLocalHost();
word=host+"=====:"+server; //需要发送给 服务器的信息
socket=new Socket(InetAddress.getByName(address), 8800);
//打开所有的输入输出流
is=socket.getInputStream();
os=socket.getOutputStream();
//设置通信的编码格式
os.write(word.getBytes("gbk")); //发送数据
//接收
say=is.read(buf);
System.out.println("服务器说:"+new String(buf, 0, say));
}
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
os.close();
is.close();
socket.close();
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
客户端代码
使用socket实现聊天功能的更多相关文章
- socket实现聊天功能(二)
socket实现聊天功能(二) WebSocket协议是建立在HTTP协议之上,因此创建websocket服务时需要调用http模块的createServer方法.将生成的server作为参数传入so ...
- Socket 实现聊天功能
注:本文来自:简书:jianshu 作者:jijs链接:http://www.jianshu.com/p/7c0722a8b66f來源:简书著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...
- 我们一起学习WCF 第九篇聊天功能
说到聊天,那么其实就是传输数据,把自己写的东西传给自己想发送的那么人.我总结一下传输常见的有三种方式 1:就是我们常见的数据库传输 2:就是文件(流)传输 3:就是socket传输 今天我们说的wcf ...
- Socket.IO聊天室~简单实用
小编心语:大家过完圣诞准备迎元旦吧~小编在这里预祝大家元旦快乐!!这一次要分享的东西小编也不是很懂啊,总之小编把它拿出来是觉地比较稀奇,而且程序也没有那么难,是一个比较简单的程序,大家可以多多试试~ ...
- Android 基于Socket的聊天应用(二)
很久没写BLOG了,之前在写Android聊天室的时候答应过要写一个客户(好友)之间的聊天demo,Android 基于Socket的聊天室已经实现了通过Socket广播形式的通信功能. 以下是我写的 ...
- Linux下p2p的聊天功能实现
Linux下p2p的聊天功能实现细节 Do one thing at a time, and do well. 今天闲着没事,写一个P2P的点对点的聊天功能的小程序,我觉得对网络编程初学者的学习很有用 ...
- windows phone 8.1开发:socket通信聊天
本例用WPF程序做服务器端,windows phone程序做客户端.我们使用基于UDP协议的Socket通信.更多关于socket信息请查看:http://msdn.microsoft.com/zh- ...
- Spring 学习——基于Spring WebSocket 和STOMP实现简单的聊天功能
本篇主要讲解如何使用Spring websocket 和STOMP搭建一个简单的聊天功能项目,里面使用到的技术,如websocket和STOMP等会简单介绍,不会太深,如果对相关介绍不是很了解的,请自 ...
- 使用websocket实现在线聊天功能
很早以前为了快速达到效果,使用轮询实现了在线聊天功能,后来无意接触了socket,关于socket我的理解是进程间通信,首先要有服务器跟客户端,服务的启动监听某ip端口定位该进程,客户端开启socke ...
随机推荐
- 【USACO 2.2.1】序言页码
[题目描述] 一类书的序言是以罗马数字标页码的.传统罗马数字用单个字母表示特定的数值,以下是标准数字表: I 1 L 50 M 1000 V 5 C 100 X 10 D 500 最多3个同样的可以表 ...
- nodejs读取本地txt文件并输出到浏览器
var fs = require('fs'); var chrome=""; //同步执行 function tongbu(){ var data =fs.readFileSync ...
- Stack集合 Queue队列集合 Hashtable哈希表
Stack集合 干草堆集合 栈集合 栈;stack,先进后出,一个一个赋值,一个一个取值,安装顺序来. 属性和方法 实例化 初始化 Stack st = new Stack(); 添加元素 个数 Co ...
- java_method_正则校验
/** * * @Title: validadeRegExp * @Descrption : TODO (正则校验) * @param regExp * @param obj * @return * ...
- Java 的性能优化
jvm 中的方法区: 永久区---存的类的信息.方法.常量 .静态变量 1.Java的性能优化 1.减少gc的压力,优先级比较低的线程,他是一个守护线程 回收我们的堆内存. 2.尽量的避免我们的new ...
- java 代码格式(转)
//转至博客:http://developer.51cto.com/art/201202/320317.ht /** * Java编码格式个人推荐,参考JDK源码和Hyperic HQ源码(原spri ...
- 多台web服务器之间共享session
常见的几种方法如下: 1. 写客户端Cookie的方式 当用户登陆成功以后,把网站域名.用户名.密码.token.session有效时间全部采用cookie的形式写入到客户端的cookie里面,如果用 ...
- 转:Google论文之二----Google文件系统(GFS)翻译学习
文章来自于:http://www.cnblogs.com/geekma/archive/2013/06/09/3128372.html 摘要 我们设计并实现了Google文件系统,它是一个可扩展的分布 ...
- 嵌入式linux加载引导内核和根文件系统的方法
总体来说,嵌入式Linux内核和根文件的引导与PC机差不多.嵌入式linux内核和根文件系统可以存放在各种可能的存储设备中,一般情况下我 们将内核和根文件系统直接烧入到Flash中(包括NOR和NAN ...
- ARP劫持攻击
今天下午,莫名其妙的产生. 部分客户的网站产生乱码,但本机访问或是好好的. 外网访问,乱码的原文件是一个<IFRAME>网页. 听说,有时ARP攻击是导致网络中断或时断时续. 安全狗和36 ...