利用Java基于TCP编写一个Client/Server网络应用程序,实现服务器根据客户请求将服务器端指定的文件传输给客户,如果服务器没有指定的文件,服务器将给客户返回一个信息通知客户其请求文件不存在。 下面这个是实现客户向服务器传输任意一个字符串,服务器将收到的字符串变换成大写后传回客户。能在这个程序的基础上做些变动就实现吗?如果给出答案请适当加些注释,谢谢! 
import   java.io.*: 
import   java.net.*: 
class   TCPClient{ 
    public   static   void   main(String   argv[])   throws   Exception 
    { 
          String   sentence; 
          String   modifiedSentence; 
          BufferedReader   infromUser   = 
                new   BufferedReader( 
                            new   InputStreamReader(System.in)); 
          Socket   clientSocket   =   new   Socket(“hostname”,6789); 
          DataOutputStream   outToServer   = 
                New   DataOutputStream( 
                              clientSocket.getOutputStream()); 
          BufferedReader   infromServer   = 
                new   BufferedReader(new   InputStreamReader( 
                              clientSocket.getInputStream())); 
          sentence   =   inFromUser.readLine(); 
          outToServer.writeBytes(sentence   +   ‘\n’); 
          modifiedSentence   =   inFromServer.readLine(); 
          System.out.println(“FROM   SERVER:”+ 
                                                      modifiedSentence); 
          clientSocket.close(); 
      } 

解决方案 »

  1.   

    用多线程处理一下吧
    import java.net.*;
    import java.io.*;
    class NetTest extends Thread
    {
    public static void main(String [] args)
    {
    if (args.length>0)
    {
    server();//写到一个程序里了,如果运行时代参数,如java NetTest a,那么就启动服务端
    }
    else
    {
    client();
    }
    }
    private Socket s;
    public  NetTest(Socket s)
    {
    this.s=s;
    }
    public void run()//服务进程启动
    {
    try
    {
    OutputStream os=s.getOutputStream();
    InputStream  is=s.getInputStream();
    os.write("server".getBytes());
    byte [] buf=new byte[100];
    int len =is.read(buf);
    System.out.println(new String(buf,0,len) );
    os.close();
    is.close();
    s.close();
    }
    catch(Exception ex)
    {
    ex.printStackTrace();
    }
    }
    public static void server()//服务器程序,可独立为一个类
    {
    try
    {
    ServerSocket ss=new ServerSocket(6000);
    while(true)
    {
      Socket s=ss.accept();//等待客户端连接
      new NetTest(s).start(); 当客户端连接,启动一个服务器的套接字线程
      //ss.close();
      }
    }
    catch(Exception ex)
    {
    ex.printStackTrace();
    }
    }
    public static void client()
    {
    try
    {
    Socket s=new Socket(InetAddress.getByName(null),6000);
    OutputStream os=s.getOutputStream();
    InputStream  is=s.getInputStream();
    byte [] buf=new byte[100];
    int len =is.read(buf);
    System.out.println(new String(buf,0,len) );
    os.write("client".getBytes());
    os.close();
    is.close();
    s.close();

    }
    catch(Exception ex)
    {
    ex.printStackTrace();
    System.out.println("网络不通");
    }
    }
    }
    基本应该ok了吧!
      

  2.   

    import java.net.*;
    import java.io.*;
    class NetTest extends Thread
    {
    public static void main(String [] args)
    {
    if (args.length>0)
    {
    server();
    }
    else
    {
    client();
    }
    }
    private Socket s;
    public  NetTest(Socket s)
    {
    this.s=s;
    }
    public void run()
    {
    try
    {
    OutputStream os=s.getOutputStream();
    InputStream  is=s.getInputStream();
    os.write("server".getBytes());
    byte [] buf=new byte[100];
    int len =is.read(buf);
    System.out.println(new String(buf,0,len) );
    os.close();
    is.close();
    s.close();
    }
    catch(Exception ex)
    {
    ex.printStackTrace();
    }
    }
    public static void server()
    {
    try
    {
    ServerSocket ss=new ServerSocket(6000);
    while(true)
    {
      Socket s=ss.accept();
      new NetTest(s).start(); 
      //ss.close();
      }
    }
    catch(Exception ex)
    {
    ex.printStackTrace();
    }
    }
    public static void client()
    {
    try
    {
    Socket s=new Socket(InetAddress.getByName(null),6000);
    OutputStream os=s.getOutputStream();
    InputStream  is=s.getInputStream();
    byte [] buf=new byte[100];
    int len =is.read(buf);
    System.out.println(new String(buf,0,len) );
    os.write("client".getBytes());
    os.close();
    is.close();
    s.close();

    }
    catch(Exception ex)
    {
    ex.printStackTrace();
    System.out.println("网络不通");
    }
    }
    }