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实现聊天功能的更多相关文章

  1. socket实现聊天功能(二)

    socket实现聊天功能(二) WebSocket协议是建立在HTTP协议之上,因此创建websocket服务时需要调用http模块的createServer方法.将生成的server作为参数传入so ...

  2. Socket 实现聊天功能

    注:本文来自:简书:jianshu 作者:jijs链接:http://www.jianshu.com/p/7c0722a8b66f來源:简书著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...

  3. 我们一起学习WCF 第九篇聊天功能

    说到聊天,那么其实就是传输数据,把自己写的东西传给自己想发送的那么人.我总结一下传输常见的有三种方式 1:就是我们常见的数据库传输 2:就是文件(流)传输 3:就是socket传输 今天我们说的wcf ...

  4. Socket.IO聊天室~简单实用

    小编心语:大家过完圣诞准备迎元旦吧~小编在这里预祝大家元旦快乐!!这一次要分享的东西小编也不是很懂啊,总之小编把它拿出来是觉地比较稀奇,而且程序也没有那么难,是一个比较简单的程序,大家可以多多试试~ ...

  5. Android 基于Socket的聊天应用(二)

    很久没写BLOG了,之前在写Android聊天室的时候答应过要写一个客户(好友)之间的聊天demo,Android 基于Socket的聊天室已经实现了通过Socket广播形式的通信功能. 以下是我写的 ...

  6. Linux下p2p的聊天功能实现

    Linux下p2p的聊天功能实现细节 Do one thing at a time, and do well. 今天闲着没事,写一个P2P的点对点的聊天功能的小程序,我觉得对网络编程初学者的学习很有用 ...

  7. windows phone 8.1开发:socket通信聊天

    本例用WPF程序做服务器端,windows phone程序做客户端.我们使用基于UDP协议的Socket通信.更多关于socket信息请查看:http://msdn.microsoft.com/zh- ...

  8. Spring 学习——基于Spring WebSocket 和STOMP实现简单的聊天功能

    本篇主要讲解如何使用Spring websocket 和STOMP搭建一个简单的聊天功能项目,里面使用到的技术,如websocket和STOMP等会简单介绍,不会太深,如果对相关介绍不是很了解的,请自 ...

  9. 使用websocket实现在线聊天功能

    很早以前为了快速达到效果,使用轮询实现了在线聊天功能,后来无意接触了socket,关于socket我的理解是进程间通信,首先要有服务器跟客户端,服务的启动监听某ip端口定位该进程,客户端开启socke ...

随机推荐

  1. LIKE匹配关键字

    1.% 匹配任意数目字符(包括零个字符) SELECT * FROM edo_user WHERE true_name LIKE '王%' 应用:关键字查询 WHERE u.true_name lik ...

  2. · HTML使用Viewport

    · HTML使用ViewportViewport可以加速页面的渲染,请使用以下代码<meta name=”viewport” content=”width=device-width, initi ...

  3. js监听回车事件

    标题通俗的说,也就是绑定当用户按下回车键要执行的事件. 下面,入正题. 第一步,先编写简单的页面代码,这里我们只需要一个按钮就足够了.当然,还有按钮事件. <html> <head& ...

  4. 在centos集成服务器上安装imap扩展

    yum install libc-client-devel.x86_64(如果不行就yum install libc-client-devel)ln -s /usr/lib64/libc-client ...

  5. sock_ntop等函数

    inet_ntop的一个基本问题是:它要求调用者传递一个指向某个二进制地址的指针, 而该地址通常包含在一个套接字地址结构中,这就要求调用者必须知道这个结构的格式和地址簇, 为了使用这个函数,我们必须为 ...

  6. 生成MyEclipse6.5&7.5&8.0注册码的java源码

    //运行后即可得到注册码 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamRe ...

  7. 构建高可用web站点(四)

    首先我们来了解负载均衡的概念:英文名称为Load Balance,其意思就是将负载(工作任务)进行平衡.分摊到多个操作单元上进行执行,例如Web服务器.FTP服务器.企业关键应用服务器和其它关键任务服 ...

  8. 海园帮忙写的JQUERY功能,实现了我们想要的,我觉得有点屌哟~~

    需求就是为了可以在WEB在线更新代码期间,如果执行时间较长的话, 就在提交按钮之后,按钮变为灰色. 同时,一个DIV里每隔两秒刷新输出. 当更新完成之后(检测文档中的关键字串),按钮变为可提交状态~~ ...

  9. FLASK初步实践

    感觉经过DJANGO,CI,RAILS之类的WEB框架之后,FLASK的思路就比较顺畅了... FLASKR.PY import sqlite3 from flask import Flask, re ...

  10. ARP劫持攻击

    今天下午,莫名其妙的产生. 部分客户的网站产生乱码,但本机访问或是好好的. 外网访问,乱码的原文件是一个<IFRAME>网页. 听说,有时ARP攻击是导致网络中断或时断时续. 安全狗和36 ...