问题描述
- 我做了一个socket通信程序,服务器是server,用户是client
-
但是我同学运行用户程序,我运行服务器程序,却连接不上,为什么呢?具体代码如下服务器程序:
import java.awt.Color;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;import javax.swing.*;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.WindowConstants;public class Text1 extends Thread
{
private Socket serversocket=null;
int i=0;
public Text1(Socket socket)
{
this.serversocket=socket;
}
public void run()
{try { final Socket socket=serversocket; final BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); final PrintWriter out = new PrintWriter(socket.getOutputStream()); final BufferedReader sin=new BufferedReader(new InputStreamReader(System.in)); JFrame jf=new JFrame("这是服务器,正在与客户"+i+"对话"); Container container=jf.getContentPane(); jf.setVisible(true); //设置窗体为可视 jf.setLayout(null); //窗体布局为网格 jf.setSize(400,450); jf.setLocation(200,100 ); jf.setBackground(Color.BLUE); jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); JTextArea a=new JTextArea(""); container.add(a); a.setBounds(0, 0, 385, 360); a.setBackground(Color.ORANGE); JTextField b=new JTextField(""); container.add(b); b.setBounds(0,360, 385, 50); b.setBackground(Color.PINK); b.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String s=b.getText(); out.println(s); out.flush(); a.append(" "); a.append("您自己: "+s); if(s=="bye") { try { out.close(); in.close(); socket.close(); } catch(Exception e1) {} } } }); String str=null; while(str!="bye") { try { str=in.readLine(); } catch(Exception e1) {} a.append(" "); a.append("来自客户: "+str); } a.setText("对话结束!"); try { in.close(); out.close(); socket.close(); } catch(Exception e1) {} } catch(Exception e) {} } public static void main(String args[]) throws IOException { ServerSocket server=null; boolean Listening=true; try { server=new ServerSocket(9999); } catch(IOException e) {} while(Listening) { new Text1(server.accept()).start(); } }
}
用户程序:
import java.awt.Color;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.net.*;import javax.swing.JFrame;
import javax.swing.*;
import javax.swing.WindowConstants;public class MyClient extends JFrame{
public static void main (String args[]) throws IOException
{
Socket socket=new Socket("59.46.65.121",9999);
final PrintWriter out=new PrintWriter(socket.getOutputStream());
final BufferedReader in=new BufferedReader(new InputStreamReader (socket.getInputStream()));
final BufferedReader sin =new BufferedReader(new InputStreamReader (System.in));JFrame jf=new JFrame("这是用户02,正在与服务器对话"); Container container=jf.getContentPane(); jf.setVisible(true); //设置窗体为可视 jf.setLayout(null); //窗体布局为网格 jf.setSize(400,450); jf.setLocation(200,100 ); jf.setBackground(Color.BLUE); jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); JTextArea a=new JTextArea(""); container.add(a); a.setBounds(0, 0, 385, 360); a.setBackground(Color.ORANGE); JTextField b=new JTextField(""); container.add(b); b.setBounds(0,360, 385, 50); b.setBackground(Color.PINK); b.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String s=b.getText(); out.println(s); out.flush(); a.append(" "); a.append("您自己: "+s); if(s=="bye") { try { out.close(); in.close(); socket.close(); } catch(Exception e1) {} } } }); String str=null; while(str!="bye") { try { str=in.readLine(); } catch(Exception e1) {} a.append(" "); a.append("来自服务器: "+str); } a.setText("对话结束!"); try { in.close(); out.close(); socket.close(); } catch(Exception e1) {} }
}
解决方案
java socket:一个Server对应多个Client
解决方案二:
楼主这个问题解决没有?哦我现在也遇到了这个问题,求赐教!
解决方案三:
你的服务端根本就没有用accept去接受客户端socket
解决方案四:
不写注释 真的不是个好习惯