您的位置:首页 > 编程语言

Socket编程简单实现局域网多人互聊

2015-08-20 22:27 519 查看
首先 我们要确认的是在同一个局域网,客户端使用的IP地址是Server的IP地址和Server的端口。这样接下来我们就能实现简单的互聊。

package com.blueZhang;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;

public class Demo6 {

public static void main(String[] args) {

ArrayList<Socket> list = new ArrayList<Socket>();//用于存储客户端的Socket的信息的

try {

ServerSocket ss = new ServerSocket(9999);//创建服务器对象

System.out.println("服务器启动");

while (true) {//循环接收 如果有客户端那么久接收并创建客户端的对象

Socket s = ss.accept();//创建客户端的对象

System.out.println(s.getInetAddress().getHostAddress() + "已连接");//输出某某某已经连接

list.add(s);//添加到list中

new Thread(new MyThread12(s, list)).start();//启动服务器端的线程
}
} catch (IOException e) {

e.printStackTrace();
}
}

}

class Demo6Thread implements Runnable {
private ArrayList<Socket> list = new ArrayList<Socket>();//存储客户端的Socket对象

private Socket s;

public Demo6Thread(Socket s, ArrayList<Socket> list) {//使用构造函数初始化

this.s = s;//初始化

this.list = list;
}

@Override
public void run() {

try {

InputStream is = s.getInputStream();//使用InputStream获取S中的信息

BufferedReader br = new BufferedReader(new InputStreamReader(//创建br 用于接收客户端的信息
is));

String a = "";//中间变量

while (true) {

a = br.readLine();//获取输入流中的信息

String line = s.getInetAddress().getHostAddress() + "说:" + a;//组合字符串

System.out.println(line);//打印说话的内容

for (int i = 0; i < list.size(); i++) {//遍历集合

Socket si = list.get(i);//获取集合中的Socket

PrintWriter pw = new PrintWriter(si.getOutputStream(), true);//获取其中的输出流

pw.println(line);//放入输入流

pw.flush();//刷新缓冲区
}

}
} catch (IOException e) {

e.printStackTrace();
} finally {
if (s != null) {
try {
s.close();//关闭流操作
} catch (IOException e) {

e.printStackTrace();
}
}
}

}

}
package com.blueZhang;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;

public class Demo6 {

public static void main(String[] args) {

ArrayList<Socket> list = new ArrayList<Socket>();//用于存储客户端的Socket的信息的

try {

ServerSocket ss = new ServerSocket(9999);//创建服务器对象

System.out.println("服务器启动");

while (true) {//循环接收 如果有客户端那么久接收并创建客户端的对象

Socket s = ss.accept();//创建客户端的对象

System.out.println(s.getInetAddress().getHostAddress() + "已连接");//输出某某某已经连接

list.add(s);//添加到list中

new Thread(new MyThread12(s, list)).start();//启动服务器端的线程
}
} catch (IOException e) {

e.printStackTrace();
}
}

}

class Demo6Thread implements Runnable {
private ArrayList<Socket> list = new ArrayList<Socket>();//存储客户端的Socket对象

private Socket s;

public Demo6Thread(Socket s, ArrayList<Socket> list) {//使用构造函数初始化

this.s = s;//初始化

this.list = list;
}

@Override
public void run() {

try {

InputStream is = s.getInputStream();//使用InputStream获取S中的信息

BufferedReader br = new BufferedReader(new InputStreamReader(//创建br 用于接收客户端的信息
is));

String a = "";//中间变量

while (true) {

a = br.readLine();//获取输入流中的信息

String line = s.getInetAddress().getHostAddress() + "说:" + a;//组合字符串

System.out.println(line);//打印说话的内容

for (int i = 0; i < list.size(); i++) {//遍历集合

Socket si = list.get(i);//获取集合中的Socket

PrintWriter pw = new PrintWriter(si.getOutputStream(), true);//获取其中的输出流

pw.println(line);//放入输入流

pw.flush();//刷新缓冲区
}

}
} catch (IOException e) {

e.printStackTrace();
} finally {
if (s != null) {
try {
s.close();//关闭流操作
} catch (IOException e) {

e.printStackTrace();
}
}
}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: