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. CountDownLatch 和 CyclicBarrier 的运用及实现原理

    I.CountDownLatch 和 CyclicBarrier 的运用 CountDownlatch: 定义: 其是一个线程同步的辅助工具,通过它可以做到使一条线程一直阻塞等待,直到其他线程完成其所 ...

  2. GitHub-修改以下host-ip可加快访问速度

    #GitHub START 207.97.227.239    github.com 204.232.175.94    gist.github.com 107.21.116.220    help. ...

  3. Build Android-x86 ICS 4 Virtualbox from Google Virtualbox Target and Intel Kernel 编译体验

    最近一直在研究android源码的编译,应该说研究的很辛苦,最难的是下源码,总是不停的断掉,最后感谢公司的高网速,找到方法后12G的源码只花了1个小时就下完了. 参考以下网址:http://softw ...

  4. 『重构--改善既有代码的设计』读书笔记----Extract Method

    在编程中,比较忌讳的一件事情就是长函数.因为长函数代表了你这段代码不能很好的复用以及内部可能出现很多别的地方的重复代码,而且这段长函数内部的处理逻辑你也不能很好的看清楚.因此,今天重构第一个手法就是处 ...

  5. Zsh安装CMake补全脚本进行CMake命令补全

    最近在尝试使用Zsh,发现其补全命令的功能相当厉害.但对CMake命令的补全在默认的5.0.5中好像没有看到,网上找了下关于配置Zsh补全的文章也没有多少.     于是自己动手,发现在Zsh安装目录 ...

  6. Light OJ 1104 第六周F题

    F - 概率(经典问题) Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu   Descri ...

  7. 函数部分应用Partial application

    def adder(m:Int,n:Int)=m+n val add2 = adder(2,_:Int) println(add2(3)) val add3 = adder(_:Int,3) prin ...

  8. asp.net请求流程

    http://developer.51cto.com/art/200902/109441.htm http://www.cnblogs.com/couhujia/archive/2010/04/21/ ...

  9. JAVA简单的SWING及AWT

    慢慢找感觉~~ package SwingGui.sky.com; import javax.swing.*; import java.awt.*; import java.awt.event.*; ...

  10. 利用Tree命令生成磁盘文件列表

    命令原型:D:/>tree /? 以图形显示驱动器或路径的文件夹结构.TREE [drive:][path] [/F] [/A]/F 显示每个文件夹中文件的名称./A 使用 ASCII 字符,而 ...