其实现的功能是一对一通信,要求谁建立网络谁就是服务器,加入网络的为客户机。下面是我的代码,其能让服务器给客户端发信息,但却不能客户端给服务器发,请各位看看是哪里的问题。
package CSTest;import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;public class ChartFrame extends JFrame implements ActionListener ,Runnable{
JTextArea disPlay ,inPut;
JButton ok;
JPanel panel;
JLabel seporator;
JMenuBar net;
JMenu menu;
JMenuItem connect ,join;
ServerSocket server;
Socket connection;
DataInputStream in;
DataOutputStream out;
boolean isServer=true;
String message="";
String user="";
String ip="";
public ChartFrame(){
super("test");
disPlay=new JTextArea();
inPut=new JTextArea(4 ,400);
ok=new JButton("ok");
panel=new JPanel();
seporator=new JLabel("分割线");
net=new JMenuBar();
menu=new JMenu("聊天");
connect=new JMenuItem("连接");
join=new JMenuItem("加入");
setJMenuBar(net);
net.add(menu);
menu.add(connect);
menu.add(join);
panel.setLayout(new BorderLayout());
setLayout(new BorderLayout());
panel.add("North" ,seporator);
panel.add("Center" ,inPut);
panel.add("South" ,ok);
add("Center" ,disPlay);
add("South" ,panel);
connect.addActionListener(this);
join.addActionListener(this);
ok.addActionListener(this);
setVisible(true);
setSize(400 ,300);
}
public void monitor(){
try {
connection=server.accept();
System.out.println("客户端已接入");
in=new DataInputStream(connection.getInputStream());
out=new DataOutputStream(connection.getOutputStream());
isServer=false;
Thread rec=new Thread(this);
rec.start();
} catch (IOException e) {
// TODO Auto-generated catch block
System.err.println("无连接响应");
}
}
public void receiv(){
String line="";
System.out.println("rec be commond");
try{
while(!line.equalsIgnoreCase(".QUIT")){
System.out.println("why server....");
line=in.readUTF();
disPlay.append(line+"\n");
System.out.println("rec"+line);
}
in.close();
}catch(IOException ioe){
System.err.println("连接中断");
}
}
public void send(String message){
//System.out.println("common...");
try {
out.writeUTF(message);
//System.out.println("write...");
} catch (IOException e) {
// TODO Auto-generated catch block
System.err.println("对方未响应");
}
}
@Override
public void run() {
// TODO Auto-generated method stub
if(isServer==true)
monitor();
if(isServer==false)
receiv();
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getSource()==connect){
user="server";
try {
server=new ServerSocket(32707);
System.out.println("已建立...");
Thread monitor=new Thread(this);
monitor.start();
} catch (IOException e1) {
System.err.println("无法进行连接");
}
}
if(e.getSource()==join){
ChatDialog dialog=new ChatDialog(this);
if(dialog.flag){
isServer=false;
try {
connection=new Socket(dialog.ip ,32707);
in=new DataInputStream(connection.getInputStream());
out=new DataOutputStream(connection.getOutputStream());
Thread rec=new Thread(this);
rec.start();
} catch (UnknownHostException e1) {
// TODO Auto-generated catch block
System.err.println("找不到主机");
} catch (IOException e1) {
// TODO Auto-generated catch block
System.err.println("连接错误");
}
}
}
if(e.getSource()==ok){
message=inPut.getText();
send(message);
}
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
new ChartFrame(); }}
package CSTest;import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;public class ChartFrame extends JFrame implements ActionListener ,Runnable{
JTextArea disPlay ,inPut;
JButton ok;
JPanel panel;
JLabel seporator;
JMenuBar net;
JMenu menu;
JMenuItem connect ,join;
ServerSocket server;
Socket connection;
DataInputStream in;
DataOutputStream out;
boolean isServer=true;
String message="";
String user="";
String ip="";
public ChartFrame(){
super("test");
disPlay=new JTextArea();
inPut=new JTextArea(4 ,400);
ok=new JButton("ok");
panel=new JPanel();
seporator=new JLabel("分割线");
net=new JMenuBar();
menu=new JMenu("聊天");
connect=new JMenuItem("连接");
join=new JMenuItem("加入");
setJMenuBar(net);
net.add(menu);
menu.add(connect);
menu.add(join);
panel.setLayout(new BorderLayout());
setLayout(new BorderLayout());
panel.add("North" ,seporator);
panel.add("Center" ,inPut);
panel.add("South" ,ok);
add("Center" ,disPlay);
add("South" ,panel);
connect.addActionListener(this);
join.addActionListener(this);
ok.addActionListener(this);
setVisible(true);
setSize(400 ,300);
}
public void monitor(){
try {
connection=server.accept();
System.out.println("客户端已接入");
in=new DataInputStream(connection.getInputStream());
out=new DataOutputStream(connection.getOutputStream());
isServer=false;
Thread rec=new Thread(this);
rec.start();
} catch (IOException e) {
// TODO Auto-generated catch block
System.err.println("无连接响应");
}
}
public void receiv(){
String line="";
System.out.println("rec be commond");
try{
while(!line.equalsIgnoreCase(".QUIT")){
System.out.println("why server....");
line=in.readUTF();
disPlay.append(line+"\n");
System.out.println("rec"+line);
}
in.close();
}catch(IOException ioe){
System.err.println("连接中断");
}
}
public void send(String message){
//System.out.println("common...");
try {
out.writeUTF(message);
//System.out.println("write...");
} catch (IOException e) {
// TODO Auto-generated catch block
System.err.println("对方未响应");
}
}
@Override
public void run() {
// TODO Auto-generated method stub
if(isServer==true)
monitor();
if(isServer==false)
receiv();
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getSource()==connect){
user="server";
try {
server=new ServerSocket(32707);
System.out.println("已建立...");
Thread monitor=new Thread(this);
monitor.start();
} catch (IOException e1) {
System.err.println("无法进行连接");
}
}
if(e.getSource()==join){
ChatDialog dialog=new ChatDialog(this);
if(dialog.flag){
isServer=false;
try {
connection=new Socket(dialog.ip ,32707);
in=new DataInputStream(connection.getInputStream());
out=new DataOutputStream(connection.getOutputStream());
Thread rec=new Thread(this);
rec.start();
} catch (UnknownHostException e1) {
// TODO Auto-generated catch block
System.err.println("找不到主机");
} catch (IOException e1) {
// TODO Auto-generated catch block
System.err.println("连接错误");
}
}
}
if(e.getSource()==ok){
message=inPut.getText();
send(message);
}
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
new ChartFrame(); }}
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
public class Clinet {
public static void main(String [] args)throws Exception{
Socket socket=new Socket("192.168.0.125",8088);
new ReadThread(socket).start();
new WriteThread(socket).start();
System.out.println("客户端已经启动");
}}
class ReadThread extends Thread{
private Socket socket;
public ReadThread(Socket socket){
this.socket= socket;
}
public void run(){
BufferedReader br = null;
String ipString=null;
try {
synchronized (socket) {
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
ipString=socket.getLocalAddress().getHostAddress();
}
while(true){
String msg="";
if((msg=br.readLine())!=null){
System.out.println(msg);
}
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}class WriteThread extends Thread{
private Socket socket;
public WriteThread(Socket socket){
this.socket= socket;
}
public void run(){
PrintWriter pw=null;
OutputStream outputStream=null;
try {
synchronized (socket) {
outputStream=socket.getOutputStream();
pw =new PrintWriter(outputStream);
}
String msg=null;
while(true){
Scanner scanner=new Scanner(System.in);
msg=scanner.next();
pw.println(msg);
pw.flush();
outputStream.flush();
} } catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.HashMap;
import java.util.Map;public class Server {
public static Map map=new HashMap();
public static Integer msgCount=0; public void doService() throws Exception {
ServerSocket ss = new ServerSocket(8088);
System.out.println("服务器已经启动.....");
while (true) {
Socket socket = ss.accept();
System.out.println("一个客户端连接了...");
try {
new ReadThead(socket).start();
new WriteThead(socket).start();
} catch (Exception e) {
// TODO: handle exception
}
}
} public static void main(String[] args) throws Exception {
new Server().doService();
}
}class ReadThead extends Thread { private Socket socket; public ReadThead(Socket socket) {
this.socket = socket;
} @Override
public void run() {
// TODO Auto-generated method stub BufferedReader br = null;
String ipString = null;
try { synchronized (socket) {
br = new BufferedReader(new InputStreamReader(socket
.getInputStream()));
ipString = socket.getLocalAddress().getHostAddress();
}
while (true) {
String msg = ""; if ((msg = br.readLine()) != null) {
msg = ipString + "说:" + msg;
System.out.println(msg);
synchronized (Server.map) {
Server.map.put(Server.msgCount++, msg); }
}
} } catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}}class WriteThead extends Thread {
private Integer msgCount=0;
private Socket socket; public WriteThead(Socket socket) {
this.socket = socket;
} public void run() {
PrintWriter pw = null;
OutputStream outputStream = null;
try {
synchronized (socket) {
outputStream = socket.getOutputStream();
pw = new PrintWriter(outputStream); }
String msg = null;
while (true) {
synchronized (Server.map) {
if (msgCount < Server.map.size()) {
msg = Server.map.get(msgCount).toString();
pw.println(msg);
pw.flush();
outputStream.flush();
msgCount++;
}
} } } catch (Exception e) {
// TODO: handle exception
e.printStackTrace(); }
}
}给你个现成的吧、client写错了、、高手别见笑、今天没事写得玩的