自己写了一个多线程的socket,没有条件多台机器测试,哪位大侠给我测试一下能通过不,谢谢//服务器端的
import java.io.*;
import java.net.*;public class MyServer implements Runnable {
static Socket client; Thread trd = null; MyServer() {
trd = new Thread(this);
trd.start(); } public void run() {
try {
BufferedReader in = new BufferedReader(new InputStreamReader(client
.getInputStream()));
PrintWriter out = new PrintWriter(client.getOutputStream()); while (true) {
String str = in.readLine();
System.out.println(str);
out.println("has receive....");
out.flush();
if (str.equals("end"))
break;
} } catch (IOException e) {
}
} public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(9999);
while (true) {
client = server.accept();
new MyServer();
client.close();
}
}
}
//客户端
import java.io.*;
import java.net.*;
public class Client1
{
Socket socket;
BufferedReader in;
PrintWriter out;public Client1()
{try{
socket = new Socket("192.168.0.4", 9999);//服务器端的IP地址和要使用的端口号
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(socket.getOutputStream(),true);
BufferedReader line = new BufferedReader(new InputStreamReader(System.in));
out.println(line.readLine());
line.close();
out.close();
in.close();
socket.close();
}
catch (IOException e){}}
public static void main(String[] args)
{new Client1();}} 

解决方案 »

  1.   

    一台机器上不行啊
    socket = new Socket("192.168.0.4", 9999);不对
    socket = new Socket("localhost", 9999);也不对输入都没反映啊,我用了下面这个一台客户端的(单线程的),两台机器测试通过了的
    import java.io.*;
    import java.net.*;public class MyServer {
     public static void main(String[] args) throws IOException{
      ServerSocket server=new ServerSocket(4566);
    while(true){
    Socket client=server.accept();
    BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream()));
    PrintWriter out=new PrintWriter(client.getOutputStream());
    while(true){
     String str=in.readLine();
    System.out.println(str);
     out.println("has receive....");
     out.flush();
     if(str.equals("end"))
     break;
    }
    client.close();}} }
      

  2.   

    我从来都是在自己机子上开2个eclipse,一个写服务器,一个写客户端.一些我写的代码,你看看能不能对你有帮助吧.服务器端package socket;import java.io.*;
    import java.net.*;/**
     * @author April
     */
    public class ICKSocket
    {
    private int i_serInPort = 5050; // input port of server
    private int i_serOutPort = 5051; // output port of server private ServerSocket sInSocket; // input server socket
    private ServerSocket sOutSocket; // output server socket public ICKSocket()
    {
    // TODO initializes server socket
    try
    {
    // create server socket for input
    sInSocket = new ServerSocket(i_serInPort);
    // create server socket for output
    sOutSocket = new ServerSocket(i_serOutPort);
    }
    catch (IOException e)
    {
    e.printStackTrace();
    }
    } /**
     * Get server input socket
     * @return sInSocket
     */
    public ServerSocket getInSocket()
    {
    return sInSocket;
    } /**
     * Get server output socket
     * @return sOutSocket
     */
    public ServerSocket getOutSocket()
    {
    return sOutSocket;
    } /**
     * Set server in socket
     * @param socket
     */
    public void setInSocket(ServerSocket socket)
    {
    sInSocket = socket;
    } /**
     * Set server out socket
     * @param socket
     */
    public void setOutSocket(ServerSocket socket)
    {
    sOutSocket = socket;
    }
    }
    /**
     * @author April
     */
    public class MainThreadSocket extends Thread
    {
    private Socket cInSocket = null; // input socket
    private Socket cOutSocket = null; // output socket private ICKSocket ickSocket; // server socket
    private ClientThreadSocket clientThreadSocket; private boolean mainThreadState = false; /**
     * @param writeLog
     */
    public MainThreadSocket()
    {
    ickSocket = new ICKSocket(); // createDb = new CreateDatabase();
    // createTab = new CreateUserContactTable();
    } /**
     * Run main thread, synchronized subthread. When receive a request, create a ClientThreadSocket
     * to manager it.
     */
    public void run()
    {
    while (mainThreadState)
    {
    try
    {
    synchronized (this)
    {
    // monitor input and create socket
    cInSocket = ickSocket.getInSocket().accept();
    // monitor output and create socket
    cOutSocket = ickSocket.getOutSocket().accept(); // create a subthread to answer client
    clientThreadSocket = new ClientThreadSocket(this);
    clientThreadSocket.start();
    }
    }
    catch (IOException e)
    {
    e.printStackTrace();
    }
    }
    }
    }
      

  3.   

    客户端/**
     * ClientSocket.java This class create a socket to connect the server and user can user this socket
     * in other request to do their action. It contents the server's port, server's IP, the reader
     * receive message from server and the writer to write message to server.
     */package server;import java.net.*;
    import java.io.*;/**
     * @author April
     */
    public class ClientSocket
    {
    private int i_serInPort = 5050; // in port of server
    private int i_serOutPort = 5051; // out port of server
    private String serIP = "219.221.112.134"; private static Socket inSocket = null; // input socket of client
    private static Socket outSocket = null; // output socket of client private static BufferedReader reader = null; // client input stream
    private static PrintStream writer = null; // client output stream private static boolean serState = false; public ClientSocket()
    {
    // TODO create socket, reader and writer to commute information with server
    try
    {
    inSocket = new Socket(serIP, i_serOutPort);
    outSocket = new Socket(serIP, i_serInPort);
    writer = new PrintStream(outSocket.getOutputStream());
    reader = new BufferedReader(new InputStreamReader(inSocket.getInputStream())); serState = true;
    }
    catch (UnknownHostException e)
    {
    e.printStackTrace();
    serState = false;
    }
    catch (IOException e)
    {
    e.printStackTrace();
    serState = false;
    }
    } /**
     * Get client in socket
     * @return insocket
     */
    public static Socket getInSocket()
    {
    return inSocket;
    } /**
     * Get client out socket
     * @return outsocket
     */
    public static Socket getOutSocket()
    {
    return outSocket;
    } /**
     * Get reader which read information from server
     * @return reader
     */
    public static BufferedReader getReader()
    {
    return reader;
    } /**
     * Get writer which write information to server
     * @return writer
     */
    public static PrintStream getWriter()
    {
    return writer;
    } /**
     * Get server state
     * @return true server is ok
     * @return false server is closed
     */
    public static boolean getServerState()
    {
    return serState;
    }
    }/**
     * ReadThread.java This class create thread to deal with server's information. If receive
     * information from server, judge what's the content of this information and turn to correspond
     * refresh function.
     */package server;import java.io.BufferedReader;
    import java.io.IOException;
    import mainWin.MainFrame;/**
     * @author April
     */
    public class ReadThread extends Thread
    {
    private String receiveMsg = null;
    private BufferedReader reader = null;
    public static boolean userExit = true; public ReadThread(MainFrame main)
    {
    reader = ClientSocket.getSocket().getReader();
    } public void run()
    {
    while (!userExit)
    {
    try
    {
    receiveMsg = reader.readLine();
    }
    catch (IOException e)
    {
    e.printStackTrace();
    } if (!receiveMsg.equals(null))
    {
    // something you want to do
          }
    else
    {}
    }
    }
    }