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. 如何使用LoadRunner监控Windows

    1.监视连接前的准备工作   1)进入被监视windows系统,开启以下二个服务Remote Procedure Call(RPC) 和Remote Registry Service (开始—)运行 ...

  2. 在IE6/7/8下识别html5标签

    识别html5标签: html5添加了许多语义化的标签,比如<nav></nav>,<aside></aside>,<article>< ...

  3. 随手写的Java向文本文件写字符串的类

    今天看了一篇讲Java IO流的文章,好长时间没用IO流了,回顾了一下Java编写IO程序的思路,之前文章中有介绍.对于写二进制文件我们习惯用 面向字节类的流.对于写字符我们使用面向字符类的流.但是我 ...

  4. java中dynamic web project与web project 的区别 [转]

    原帖地址:http://blog.sina.com.cn/s/blog_46726d2401013jlk.html 文章框架: 1.Dynamic  Web Project 概念 2.eclipse ...

  5. java指纹识别+谷歌图片识别技术

    http://www.icodeguru.com/3/2451.html http://valseonline.org/thread-124-1-1.html

  6. 树形dp+MST-hdu-4126-Genghis Khan the Conqueror

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4126 题目意思: 给一图,n个点,m条边,每条边有个花费,给出q条可疑的边,每条边有新的花费,每条可 ...

  7. Java获取程序或项目路径的常用方法

    在写java程序时不可避免要获取文件的路径,比较常用的方法有: 1 在任意的class里调用: this.getClass().getClassLoader().getResource("/ ...

  8. stdout 与 stderr 的区别

    stdout 与 stderr 的区别 一直没有注意 stdout 与 stderr 的区别,以为只是不同的描述方式.看来不是这样的. stdout 主要处理的是使用者输出 stderr 主要处理的错 ...

  9. POJ 1122 FDNY to the Rescue! Floyd 打印路径就行了

    题目大意: 纽约消防部门的支援速度是值得纽约人骄傲的一件事.但是他们想要最快的支援速度,帮助他们提升支援速度他们要调度离着火点最近的一个消防站.他们要你写一个程序来维护纽约消防站的光荣传统.软件需要有 ...

  10. Bit,Bytes,KB,MB,GB,TB,PB,EB,ZB,YB

    Bit,Bytes,KB,MB,GB,TB,PB,EB,ZB,YB 汉字字符 2字节英文字符 1字节中文标点 2字节英文标点 1字节一个字节就是一个八位二进制数啊,2就是00000010,4就是000 ...