利用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();
}
}
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();
}
}
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了吧!
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("网络不通");
}
}
}