本人跟着老师写了一个模拟java聊天的程序,可是我写了在win7下运行不成功,报错信息如下:
java.net.ConnectException: Connection refused: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:519)
at java.net.Socket.connect(Socket.java:469)
at java.net.Socket.<init>(Socket.java:366)
at java.net.Socket.<init>(Socket.java:180)
at com.briup.net.SocketChat.client(SocketChat.java:81)
at com.briup.net.SocketChat.main(SocketChat.java:28)
还请高手救救小弟啊,,老师也木有给我解决啊···求助啊···源码如下:(老师那里可以运行的)import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;public class SocketChat { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
if(args.length>0){
server();
}
else{
client();
}
}
//服务端程序
public static void server(){
System.out.println("==========server run window===========");
try {
ServerSocket ss = new ServerSocket(9999);
Socket s = ss.accept();
InputStream is = s.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
DataInputStream dis = new DataInputStream(bis);
OutputStream os = s.getOutputStream();
BufferedOutputStream bos = new BufferedOutputStream(os);
DataOutputStream dos = new DataOutputStream(bos);
//字符输入流的对象
InputStreamReader isr = new InputStreamReader(System.in);//可以将一个字节输入流转换为字符流
BufferedReader br = new BufferedReader(isr);
String info;
while(true){
info = dis.readUTF();
System.out.println("client say: "+info);
if(info.equals("bye")){
break;
}
info = br.readLine();
dos.writeUTF(info);
dos.flush();
if(info.equals("bye")){
break;
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//客户端程序
public static void client(){
System.out.println("==========client run window===========");
try {
Socket s = new Socket("127.0.0.1",9999);
OutputStream os = s.getOutputStream();
BufferedOutputStream bos = new BufferedOutputStream(os);
DataOutputStream dos = new DataOutputStream(bos);
InputStream is = s.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
DataInputStream dis = new DataInputStream(bis);
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
String info;
while(true){
info = br.readLine();
dos.writeUTF(info);
dos.flush();
if(info.equals("bye")){
break;
}
info = dis.readUTF();
System.out.println("server say: " + info);
if(info.equals("bye")){
break;
}
}
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
跪求各位高手路过指点。小弟感激不尽啊····
java.net.ConnectException: Connection refused: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:519)
at java.net.Socket.connect(Socket.java:469)
at java.net.Socket.<init>(Socket.java:366)
at java.net.Socket.<init>(Socket.java:180)
at com.briup.net.SocketChat.client(SocketChat.java:81)
at com.briup.net.SocketChat.main(SocketChat.java:28)
还请高手救救小弟啊,,老师也木有给我解决啊···求助啊···源码如下:(老师那里可以运行的)import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;public class SocketChat { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
if(args.length>0){
server();
}
else{
client();
}
}
//服务端程序
public static void server(){
System.out.println("==========server run window===========");
try {
ServerSocket ss = new ServerSocket(9999);
Socket s = ss.accept();
InputStream is = s.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
DataInputStream dis = new DataInputStream(bis);
OutputStream os = s.getOutputStream();
BufferedOutputStream bos = new BufferedOutputStream(os);
DataOutputStream dos = new DataOutputStream(bos);
//字符输入流的对象
InputStreamReader isr = new InputStreamReader(System.in);//可以将一个字节输入流转换为字符流
BufferedReader br = new BufferedReader(isr);
String info;
while(true){
info = dis.readUTF();
System.out.println("client say: "+info);
if(info.equals("bye")){
break;
}
info = br.readLine();
dos.writeUTF(info);
dos.flush();
if(info.equals("bye")){
break;
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//客户端程序
public static void client(){
System.out.println("==========client run window===========");
try {
Socket s = new Socket("127.0.0.1",9999);
OutputStream os = s.getOutputStream();
BufferedOutputStream bos = new BufferedOutputStream(os);
DataOutputStream dos = new DataOutputStream(bos);
InputStream is = s.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
DataInputStream dis = new DataInputStream(bis);
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
String info;
while(true){
info = br.readLine();
dos.writeUTF(info);
dos.flush();
if(info.equals("bye")){
break;
}
info = dis.readUTF();
System.out.println("server say: " + info);
if(info.equals("bye")){
break;
}
}
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
跪求各位高手路过指点。小弟感激不尽啊····
解决方案 »
- 关于局部变量作为返回值的问题
- createTempFile名字问题
- java I/O基础知识,望各位大侠不吝赐教,在线等...
- 求助!!!!
- 求“青岛本地”JAVA高手,需做SWING,GUI做客户端界面,对数据库进行调用,配合MYSQL,有偿!!具体事宜详谈!
- 类的按值传递和句柄引用(String类的疑惑)?????????????
- 敢问各位老大,我想把一个应用程序转换成一个类,使得它能被jsp页面引用,怎样做?
- 今天开始学java...做个标记并散分...
- 如何将图象从Oracle数据库中读出直接显示到Jsp页面上?谢谢
- JavaSE的小项目问题
- 一个关于String的问题
- 请问,java 如何在JPanel指定位置放置JTextPane
ping 下localhost看是否为127.0.0.1,或者看看又没有9999端口
我认为你这是在同一台机器上测试
可以自己找另一台机器测试
我用netstat -a有0.0.0.0:9999这个东西,可是木有127.0.0.1:9999
然后在运行客户端就会报错··
你用Socket s = new Socket("localhost",9999);试试
public static void main(String[] args) {
// TODO Auto-generated method stubif(args.length>0){
server();
}
else{
client();
}
}
你这种,要么启动服务端,要么启动客户端。
正确的做法,应该是需要用线程的哦。下面是我的源码,仅供参考。
客户端代码实现类:ChatClient
public class ChatClient { private JFrame jf = new JFrame("聊天室客户端");
private JTextArea jt = new JTextArea();
private DataOutputStream dos = null;
private JTextField jtf = new JTextField(15);
public static void main(String[] args) {
ChatClient cc = new ChatClient();
try {
cc.createForm();
cc.clientStart("127.0.0.1", 8888);
} catch (Exception e) {
e.printStackTrace();
}
} /**
* 创建客户端用户的图形窗体
* @author gsucbiao
* @date 2011-6-14 && 下午09:52:24
* @method createForm
* @type void
*/
public void createForm() {
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.getContentPane().add(jt, BorderLayout.CENTER);
JButton jb = new JButton("发送");
SendButtonAction sendAction = new SendButtonAction();
jb.addActionListener(sendAction);
JPanel jp = new JPanel();
jp.add(jtf);
jp.add(jb);
jf.getContentPane().add(jp, BorderLayout.SOUTH);
jf.setSize(300, 200);
jf.setVisible(true);
}
public void clientStart(String ip, int port) throws Exception {
Socket s = new Socket(ip, port);
dos = new DataOutputStream(new BufferedOutputStream(s.getOutputStream()));
new ChatServerReadServer(s).start();
}
class SendButtonAction implements ActionListener { @Override
public void actionPerformed(ActionEvent e) {
String msg = jtf.getText();
jtf.setText("");
if("".equals(msg)) {
JOptionPane.showMessageDialog(jf, "Content can not be empty!");
return ;
}
try {
dos.writeUTF(msg);
dos.flush();
} catch (Exception ex) {
JOptionPane.showMessageDialog(jf, "Sending failed, please try again!");
ex.printStackTrace();
}
}
} class ChatServerReadServer extends Thread {
private Socket s;
public ChatServerReadServer(Socket s) {
this.s = s;
}
public void run() {
try {
DataInputStream dis = new DataInputStream(new BufferedInputStream(s.getInputStream()));
while(true) {
String msg = jt.getText() + "\n\r" + dis.readUTF();
jt.setText(msg);
if("88".equals(msg)) {
break;
}
}
} catch (Exception e) {
System.out.println("Have been out of chat rooms!");
}
}
}
}
服务端代码实现类:ChatServer
public class ChatServer {
private Vector<Socket> vect = new Vector<Socket>(); public static void main(String[] args) {
ChatServer server = new ChatServer();
try {
server.startServer(8888);
} catch (Exception e) {
System.out.println("server starting is failed!");
e.printStackTrace();
}
} /**
* 启动服务器,并循环监听接收客户端的链接
* @author gsucbiao
* @date 2011-6-14 && 下午10:02:32
* @method startServer
* @type void
* @param port 端口号
* @throws Exception
*/
public void startServer(int port) throws Exception {
ServerSocket ss = new ServerSocket(port);
while(true) {
Socket s = ss.accept();
vect.add(s);
new ChatSocketOpt(s).start();
}
}
class ChatSocketOpt extends Thread {
private Socket s;
public ChatSocketOpt(Socket s) {
this.s = s;
}
public void run() {
try {
DataInputStream dis = new DataInputStream(new BufferedInputStream(s.getInputStream()));
while(true) {
String msg = dis.readUTF();
System.out.println("Server accept is " + msg);
for(Socket tmp_s : vect) {
if(tmp_s != s) {
DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(tmp_s.getOutputStream()));
dos.writeUTF(msg);
dos.flush();
}
}
if("88".equals(msg)) {
break;
}
}
} catch (Exception e) {
System.out.println("已退出聊天室");
vect.remove(s);
}
}
}
}
试过了··错误还是一样的··
ping localhost显示:正在 Ping PC [::1]具有32字节的数据还是不行啊···
试过了··错误还是一样的··
ping localhost显示:正在 Ping PC [::1]具有32字节的数据还是不行啊···
是用线程,这个下一步就会这么写了··不过老师说需要调通这个才可以继续··
mian方法这样写也是可以的,这个可以运行两次的··第一次给main方法个参数,
运行服务端server,然后将参数取消在就可以运行客户端client了。
然后这两个窗口就可以进行对话了··因为老师那里已经实验成功了。不过还是谢谢您的方法··调通这个我在试试哈···
用这个试试
Socket s = new Socket(InetAddress.getLocalHost(),9999)
else{
client();到这Socket s = new Socket("127.0.0.1",9999);
好像就有问题了···拒绝访问了···
一直木有办法解决啊···
看看你的端口是不是被防火墙屏掉了,一定是你电脑的问题了
嗯,,我也觉得是我电脑的问题,,运行后也ping 过,9999这个端口没有被占有,
程序运行后ping显示0.0.0.0:9999;
不过后面我就不知道怎么解决了··还请您教教小弟我呗···
记下pid去资源管理器找程序;
看看你的端口是不是被防火墙屏掉了,一定是你电脑的问题了
这个地方是怎么做的呢??怎么去资源管理器找啊??怎么关掉防火墙啊??
跪求指点····谢谢啊···过后一定给您加高分啊····
在外围应用配置器里可以修改的。
启用tcp/ip这个选项
启用 tcp/ip 之后 查看下监视器又没有启用
监视器启用之后,去测试会显示成功的。
if(args.length>0)因为我没有设置控制台参数,args.length=0,所以不能正确运行。你用的是Jbuilder哪个版本?如果是2008的,在Run Dialog的这里设置(随便一个数,比零大就行)
if(args.length>0){我没有设置控制台参数,结果args.length=0了,而不是大于0。你也可以试试修改参数,应该能帮到你。Jbuilder2008的参数设置在Open Run Dialog——arguments——Program arguments里设置,我随便输入了一个数(比0大),解决了我的问题。