Client
package ChatIV;import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class Client1 { public static void main(String args[])
{
try
{
Socket s = new Socket("127.0.0.1",8186);//创建Socket端口8186,端口号随意,避免常用端口即可
PrintWriter out = new PrintWriter(s.getOutputStream());//文本流输出,利用Socket对象获得getOutputStream()
BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));//包装成字符流
BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));
String readline;
while(true)
{
readline=sin.readLine();
if(readline==null)
continue;
else
{
out.println(readline);
out.flush();
}
System.out.println("Server:"+in.readLine());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Serverpackage ChatIV;
import java.net.*;
import java.io.*;
import java.util.*;public class Server
{
public static void main(String args[])
{
try
{
ServerSocket ss = new ServerSocket(8186);//实现Socket
List sockets = new ArrayList();//创建一个集合,保存文字消息
while(true)
{
Socket s = ss.accept();//监听8186
sockets.add(s);//向集合中添加Socket的对象S,把听到的内容保存到集合中
Thread t1 = new ChatThread(s,sockets);//线程
t1.start();
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
class ChatThread extends Thread
{
Socket s;
List sockets;
public ChatThread(Socket s,List sockets)
{
this.s=s;
this.sockets=sockets;
}
public void run()
{
try
{
BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));//包装成字符流
while(true)
{
String str = in.readLine();//读BufferedReader
for(int i=0;i<sockets.size();i++)
{//利用For循环遍历集合
Socket s2 = (Socket)sockets.get(i);//创建Socket对象S2,强转成Socket,并获取下标
PrintWriter out = new PrintWriter(s2.getOutputStream());//文本流输出
out.println(str);//打印字符
out.flush();//刷新该流的缓冲
}
}
}
catch (IOException e) {}
finally
{
try
{
s.close();
}
catch (IOException e) {}
}
}
}一个简单的聊天室,当开2个client以上就显示不正常了,大家帮我看看
package ChatIV;import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class Client1 { public static void main(String args[])
{
try
{
Socket s = new Socket("127.0.0.1",8186);//创建Socket端口8186,端口号随意,避免常用端口即可
PrintWriter out = new PrintWriter(s.getOutputStream());//文本流输出,利用Socket对象获得getOutputStream()
BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));//包装成字符流
BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));
String readline;
while(true)
{
readline=sin.readLine();
if(readline==null)
continue;
else
{
out.println(readline);
out.flush();
}
System.out.println("Server:"+in.readLine());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Serverpackage ChatIV;
import java.net.*;
import java.io.*;
import java.util.*;public class Server
{
public static void main(String args[])
{
try
{
ServerSocket ss = new ServerSocket(8186);//实现Socket
List sockets = new ArrayList();//创建一个集合,保存文字消息
while(true)
{
Socket s = ss.accept();//监听8186
sockets.add(s);//向集合中添加Socket的对象S,把听到的内容保存到集合中
Thread t1 = new ChatThread(s,sockets);//线程
t1.start();
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
class ChatThread extends Thread
{
Socket s;
List sockets;
public ChatThread(Socket s,List sockets)
{
this.s=s;
this.sockets=sockets;
}
public void run()
{
try
{
BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));//包装成字符流
while(true)
{
String str = in.readLine();//读BufferedReader
for(int i=0;i<sockets.size();i++)
{//利用For循环遍历集合
Socket s2 = (Socket)sockets.get(i);//创建Socket对象S2,强转成Socket,并获取下标
PrintWriter out = new PrintWriter(s2.getOutputStream());//文本流输出
out.println(str);//打印字符
out.flush();//刷新该流的缓冲
}
}
}
catch (IOException e) {}
finally
{
try
{
s.close();
}
catch (IOException e) {}
}
}
}一个简单的聊天室,当开2个client以上就显示不正常了,大家帮我看看
发内容:1
显示:1
发内容:2
显示:2
发内容:3
显示:3
发内容:x
显示:x
client2
发内容:4
显示:1
发内容:5
显示:2
发内容:6
显示:3
发内容:7
显示:x
发内容:8
显示:4