客户端收不到服务器端的信息.(两个用户)

ghosthuo1 2007-03-22 07:13:38


哪位大哥有类似的例子.给小弟一份看呀.huoyan190@sina.com QQ:573057075

服务器端:TcpServers .java
====================================================================
import java.net.*;
import java.io.*;
import java.awt.*;
import java.awt.Toolkit;
import javax.swing.*;
import javax.swing.Box;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class TcpServers extends JFrame implements ActionListener
{
JFrame frame;
JPanel contentpane,panel2;
JTextArea textarea;
JScrollPane panel3;
JButton allowLink;
JButton send;
JButton button;
JLabel message;
JLabel kehu;
JTextField textField;
JComboBox box1;
ServerSocket server;
Socket connection;
InputStream is;
OutputStream os;
BufferedReader br;
PrintWriter pw;
String client;
InetAddress client1,client2;
int port1,port2;

TcpServers()
{
frame=new JFrame("服务器端");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
frame.setSize(450,300);

contentpane=new JPanel();
panel2=new JPanel();


textarea=new JTextArea(15,10);
panel3=new JScrollPane(textarea);

allowLink=new JButton("接受连接");

send=new JButton("发送");
send.addActionListener(this);
textField=new JTextField(20);
box1=new JComboBox();

message=new JLabel("消息 :");
kehu=new JLabel("客户端 :");

Toolkit kit = Toolkit.getDefaultToolkit();
Image image = kit.getImage("Ghosthuo.jpg");
frame.setIconImage(image);


Box hbox1 = Box.createHorizontalBox();
hbox1.add(allowLink);
allowLink.addActionListener(this);
// 添加一个20像素的支柱
hbox1.add(Box.createHorizontalStrut(20));
hbox1.add(message);
hbox1.add(Box.createHorizontalStrut(20));
hbox1.add(textField);

Box hbox2 = Box.createHorizontalBox();
hbox2.add(Box.createHorizontalStrut(105));
hbox2.add(kehu);
// 添加一个20像素的支柱
hbox2.add(Box.createHorizontalStrut(8));
hbox2.add(box1);
hbox2.add(Box.createHorizontalStrut(20));
hbox2.add(send);
Box vbox = Box.createVerticalBox();
vbox.add(hbox1);
vbox.add(hbox2);

frame.setContentPane(contentpane);
contentpane.setLayout(new BorderLayout());
contentpane.add(vbox,BorderLayout.NORTH);
contentpane.add(panel3,BorderLayout.CENTER);

frame.setSize(450,300);
frame.setVisible(true);
frame.pack();
serverStart();
}

public void actionPerformed(ActionEvent event)
{
System.out.println("ha ha ");
JButton button = (JButton)event.getSource();
if(button== allowLink)
{
Thread t1=null;
Thread t2=null;
try
{
allowLink.setEnabled(false);
while(true)
{
connection=server.accept();
textarea.append("LocalPort; "+server.getLocalPort()+"\n");
if(t1==null)
{
client1=connection.getInetAddress();
box1.addItem(client1);
textarea.append("client1 has connected: "+client1+"\n");
port1=connection.getPort();
textarea.append("Port:"+port1+"\n");
t1=new Thread(new receiver(),"client1");
t1.start();
}
else
{
client2=connection.getInetAddress();
box1.addItem(client2);
textarea.append("client2 has connected:"+client2+"\n");
port2=connection.getPort();
textarea.append("Port :"+port2+"\n");
t2=new Thread(new receiver(),"client2");
t2.start();
break;
}
}
}
catch(Exception ex)
{
JOptionPane.showMessageDialog(frame,"Error: "+ex.toString());
}

}

else if(button == send)
{
Socket soc;
OutputStream os;
PrintWriter pw;
String set;
if((client1!=null)||(client2!=null))
{
try
{
set=textField.getText()+"\n";
if(box1.getSelectedItem().toString().equals(client1.toString()))
{
soc=new Socket(client1,6666);
textarea.append("To client1:"+set);
}
else
{
soc=new Socket(client2,6666);
textarea.append("To client2:"+set);
}
os=soc.getOutputStream();
pw=new PrintWriter(os);
pw.write(set);
pw.flush();
set="";
textField.setText("");
}
catch(Exception ex)
{
JOptionPane.showMessageDialog(frame,"Error:"+ex.toString());
}
}
else
JOptionPane.showMessageDialog(frame,"NO Client!");
}

}



public void serverStart()
{
try
{
server=new ServerSocket(6666);
System.out.println("222222222222");
}
catch(Exception e)
{
JOptionPane.showMessageDialog(this,"Error: "+ e.toString());
}
}


class receiver implements Runnable
{
InputStream is;
BufferedReader br;
public receiver()
{
try
{
is=connection.getInputStream();
br=new BufferedReader(new InputStreamReader(is));
}
catch(Exception ex)
{
}
}
public void run()
{
String get="";
while(true)
{
try
{
get=br.readLine();
if(!get.equals("e"))
{
textarea.append("From "+Thread.currentThread().getName()+":"+get+"\n");
}
else
{
is.close();
br.close();
connection.close();
if(Thread.currentThread().getName().equals("client1"))
{
box1.removeItem(client1.toString());
client1=null;
try{Thread.currentThread().interrupt();}
catch(SecurityException e){}
}
else
{
box1.removeItem(client2);
}
}
}
catch(Exception ex){}
}
}
}

public static void main(String[] args)
{
// TODO: 在这添加你的代码
new TcpServers();
}

}
...全文
379 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
ghosthuo1 2007-03-24
  • 打赏
  • 举报
回复
那位给代码的大哥怎么没有回应了呀...
zunshanke2004 2007-03-23
  • 打赏
  • 举报
回复
我给你发了一份,记得给我分!

lixiaoxue85(蛮野蛮) ( ) 信誉:97 Blog
写的就是多线程

再就是连接不上不止跟你的程序有关,还跟你的端口是否打开有关
feng13555 2007-03-23
  • 打赏
  • 举报
回复
学习一下
yeah920 2007-03-23
  • 打赏
  • 举报
回复
up
ghosthuo1 2007-03-23
  • 打赏
  • 举报
回复
这位大哥发的一看就很有价值呀,(很多吗)
那个服务器端和客户端不在一起的,是不是用我自己的客户端就行了呀,
大哥的这个服务器端写的很周密吗.呆小弟看有些难..
给小弟简单讲讲每个文件在程序中起的作用吧.(简单讲讲就成,小弟在自己去苦读大哥代码)
问完这个,小弟马上结帖给分.要不求了半天又看不明白...
大哥的:
AddUser.java
UserInfo.java
CommonMethod.java
ChatServer.java
AcceptParPro.java
lixiaoxue85 2007-03-22
  • 打赏
  • 举报
回复
例子 测试成功
/**
@version 1.20 2004-08-03
@author Cay Horstmann
*/

import java.io.*;
import java.net.*;
import java.util.*;

/**
This program makes a socket connection to the atomic clock
in Boulder, Colorado, and prints the time that the
server sends.
*/
public class SocketTest
{
public static void main(String[] args)
{
try
{
Socket s = new Socket("127.0.0.1", 8189);
try
{
InputStream inStream = s.getInputStream();
Scanner in = new Scanner(inStream);

while (in.hasNextLine())
{
String line = in.nextLine();
System.out.println(line);
}
}
finally
{
s.close();
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
/**
@author Cay Horstmann
@version 1.20 2004-08-03
*/

import java.io.*;
import java.net.*;
import java.util.*;

/**
This program implements a multithreaded server that listens to port 8189 and echoes back
all client input.
*/
public class ThreadedEchoServer
{
public static void main(String[] args )
{
try
{
int i = 1;
ServerSocket s = new ServerSocket(8189);

while (true)
{
Socket incoming = s.accept();
System.out.println("Spawning " + i);
Runnable r = new ThreadedEchoHandler(incoming, i);
Thread t = new Thread(r);
t.start();
i++;
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
}

/**
This class handles the client input for one server socket connection.
*/
class ThreadedEchoHandler implements Runnable
{
/**
Constructs a handler.
@param i the incoming socket
@param c the counter for the handlers (used in prompts)
*/
public ThreadedEchoHandler(Socket i, int c)
{
incoming = i; counter = c;
}

public void run()
{
try
{
try
{
InputStream inStream = incoming.getInputStream();
OutputStream outStream = incoming.getOutputStream();

Scanner in = new Scanner(inStream);
PrintWriter out = new PrintWriter(outStream, true /* autoFlush */);

out.println( "Hello! Enter BYE to exit." );

// echo client input
boolean done = false;
while (!done && in.hasNextLine())
{
String line = in.nextLine();
out.println("Echo: " + line);
if (line.trim().equals("BYE"))
done = true;
}
}
finally
{
incoming.close();
}
}
catch (IOException e)
{
e.printStackTrace();
}
}

private Socket incoming;
private int counter;
}


zzd8310 2007-03-22
  • 打赏
  • 举报
回复
google之
For_suzhen 2007-03-22
  • 打赏
  • 举报
回复
多用户就多线程呗
ghosthuo1 2007-03-22
  • 打赏
  • 举报
回复
哪位大哥能给小弟讲讲.怎么设计多用户的呀.
讲讲大体结构吧,,里面要处理的要点什么的.谢谢..
ghosthuo1 2007-03-22
  • 打赏
  • 举报
回复
哪位大哥有类似的例子.(多用户的)给小弟一份看呀.huoyan190@sina.com QQ:573057075

客户端:TcpKehuTest .java
===================================================================
import java.io.*;
import java.net.*;
import java.awt.*;
import javax.swing.*;
import java.awt.Toolkit;
import java.lang.Thread;
//import javax.swing.JScrollPane;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class TcpKehuTest extends JFrame implements ActionListener
{
JFrame frame;
JPanel contentpane;
JPanel north;
JScrollPane jsp1;
Socket connection;
JLabel message;
JTextField text1;
Image image;
Toolkit kit;
InputStream is;
OutputStream os;
BufferedReader br;
PrintWriter pw;
JTextArea textarea;
JButton linkServer;
JButton send;
Thread t1=null;

TcpKehuTest()
{
frame=new JFrame("客户端");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
contentpane=new JPanel();
north=new JPanel();
textarea=new JTextArea(20,20);
jsp1=new JScrollPane(textarea);

linkServer=new JButton("连接服务器");
message=new JLabel("消息");
text1=new JTextField(20);
send=new JButton("发送");
// JScrollPane jsp1=new JScrollPane();

kit = Toolkit.getDefaultToolkit();
image = kit.getImage("Ghosthuo.jpg");
frame.setIconImage(image);

frame.setContentPane(contentpane);
contentpane.setLayout(new BorderLayout());
contentpane.add(north,BorderLayout.NORTH);
contentpane.add(jsp1,BorderLayout.CENTER);
north.add(linkServer);
north.add(message);
north.add(text1);
north.add(send);

linkServer.addActionListener(this);
send.addActionListener(this);

frame.setSize(450,300);
frame.setVisible(true);
frame.pack();

}

public static void main(String[] args)
{
// TODO: 在这添加你的代码
new TcpKehuTest();
}

class receiver implements Runnable
{
public receiver() {}
public void run()
{
String get="";
while(true)
{
try
{
get =br.readLine();
if(get!=null)
{
textarea.append("From server:"+get+"\n");
}
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
}
}


public void actionPerformed(ActionEvent e)
{

JButton button = (JButton)e.getSource();
if(button == linkServer)
{
try
{
connection=new Socket(InetAddress.getLocalHost(),6666);
JOptionPane.showMessageDialog(this,"连接成功");
}
catch(Exception es)
{
es.printStackTrace();
JOptionPane.showMessageDialog(this,"Error:"+es.toString());
}
try
{
linkServer.setEnabled(false);
is=connection.getInputStream();
os=connection.getOutputStream();
br=new BufferedReader(new InputStreamReader(is));
pw=new PrintWriter(os);
t1=new Thread(new receiver());
t1.start();
}
catch(Exception ex)
{
JOptionPane.showMessageDialog(this,"Error:"+ex.toString());
}

}
else if(button == send)
{
String set="";
if (connection!=null)
{
try
{
set=text1.getText()+"\n";
textarea.append("To server:"+set);
pw.write(set);
pw.flush();
if(set.equals("e\n"))
{
is.close();
os.close();
pw.close();
br.close();
connection.close();
send.setEnabled(true);
}
text1.setText("");
}
catch(Exception es)
{
JOptionPane.showMessageDialog(this,"Error:"+es.toString());
}
}
}
}
}
ghosthuo1 2007-03-22
  • 打赏
  • 举报
回复
谢谢lixiaoxue85(蛮野蛮) 给的代码/
不过这个我看着不明白.基础不好.
有没有用多线程实现的呀..
万分感谢...
给小弟一份看呀.huoyan190@sina.com QQ:573057075

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧