请大家帮忙看看我的程序问题在什么地方! 谢谢!

下面是关于一个 Client 和 Server 的一个非常简单的程序,要达到的目的就是通过把几个数从Client传到Server,然后Server又把一些数传给Client。但结果是Server能够得到Client传来的数,可是Server不能把数传给Client。请问大家,问题出在什么地方?

另外,这样的传输问题,一定要用到线程吗? 非常感谢!

[code="java"]
import java.io.*;
import java.net.*;

public class ClientTest {
public static void main(String[] args) throws IOException {
Socket clientSocket = new Socket(InetAddress.getLocalHost()
.getHostAddress(), 8887);
System.out.print(InetAddress.getLocalHost().getHostAddress());

DataOutputStream outToServer = new DataOutputStream(
    new BufferedOutputStream(clientSocket.getOutputStream()));
outToServer.writeInt(123);

DataInputStream inFromServer = new DataInputStream(new BufferedInputStream(
    clientSocket.getInputStream()));
System.out.println("From Server: " + inFromServer.readInt());

outToServer.flush();
outToServer.close();
inFromServer.close();
clientSocket.close();

}
}

[/code]
[code="java"]
import java.io.*;
import java.net.*;

public class ServerTest {
public static void main(String[] args) throws IOException {
ServerSocket welcomeSocket = new ServerSocket(8887);
System.out.println("Warten auf Client ...");
Socket connectionSocket = welcomeSocket.accept();

DataInputStream inFromClient = new DataInputStream(new BufferedInputStream(
    connectionSocket.getInputStream()));
System.out.println("From Cleint: " + inFromClient.readInt());

DataOutputStream outToClient = new DataOutputStream(
    new BufferedOutputStream(connectionSocket.getOutputStream()));
outToClient.writeInt(234);
System.out.println("Daten wurden vom Server gesendet!");

inFromClient.close();
outToClient.flush();
outToClient.close();
connectionSocket.close();
welcomeSocket.close();

}
}
[/code]

[quote]import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.InetAddress;
import java.net.Socket;

public class ClientTest
{
public static void main(String[] args) throws IOException
{
Socket clientSocket = new Socket(InetAddress.getLocalHost().getHostAddress(), 8887);
System.out.print(InetAddress.getLocalHost().getHostAddress());

    DataOutputStream outToServer = new DataOutputStream(new BufferedOutputStream(clientSocket.getOutputStream()));
    outToServer.writeInt(123);

[color=red] outToServer.flush();[/color]
System.out.print("数据发送完毕....");
DataInputStream inFromServer = new DataInputStream(new BufferedInputStream(clientSocket.getInputStream()));
System.out.println("From Server: " + inFromServer.readInt());

    outToServer.flush();
    outToServer.close();
    inFromServer.close();
    clientSocket.close();
}

}[/quote]

[quote]import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class ServerTest
{
public static void main(String[] args) throws IOException
{
ServerSocket welcomeSocket = new ServerSocket(8887);
System.out.println("Warten auf Client ...");
Socket connectionSocket = welcomeSocket.accept();

    DataInputStream inFromClient = new DataInputStream(new BufferedInputStream(connectionSocket.getInputStream()));
    System.out.println("From Cleint: " + inFromClient.readInt());

    DataOutputStream outToClient = new DataOutputStream(
            new BufferedOutputStream(connectionSocket.getOutputStream()));
    outToClient.writeInt(234);
    [color=red]outToClient.flush();[/color]

    System.out.println("Daten wurden vom Server gesendet!");

    inFromClient.close();
    outToClient.flush();
    outToClient.close();
    connectionSocket.close();
    welcomeSocket.close();
}

}[/quote]

代码如上,稍微修改了一下,红色为修改的部分

可以从论坛搜一下socket方面的例子参考一下哦

这个也不一定非要用线程,看实际的应用,用线程的目的是为了并发考虑的

InputStream在read的时候,都是即时读取的,执行完马上就执行IO操作并返回数据。 而OutputStream为了提高效率都不是即时输出的,write会把数据先写到缓存里面,积累够了再一次性做IO输出,所以你虽然write了,但数据还没传出去,flush方法就是强制对buffer里面的内容做IO输出。

恩 就是写了,没有flush()。

两个客户端应该既是服务器又是客户端,
也就是在客户端增加服务器代码,
在服务器端增加客户端代码就了~~