`
sherrysky
  • 浏览: 86360 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

简单TCP网络程序-服务器及客户端交互程序

阅读更多
客户端输入一行字符串,服务器端进行倒序后返回给客户端。简单完成一个tcp交互过程。
服务器端代码ReverseServer.java
import java.net.*;
import java.io.*;
public class ReverseServer {

	/**
	 * @param args
	 *响应多个客户端,把客户端的输入字符串翻转过来显示到客户端
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
     ServerSocket ss;
	try {
		//如果传递了端口号,就用传递的;没有再用默认的8001
		if(args.length<1)
		{
		ss = new ServerSocket(8001);
		}
		//在控制台访问这个主函数,直接用命令:java ReverseServer 8002
		else
		{
		ss = new ServerSocket(Integer.parseInt(args[0]));
		}
		boolean bRunning=true;
	     while(bRunning)
	     {
	    	 Socket s=ss.accept();
	    	 new Thread(new Servicer(s)).start();
	     }
	     ss.close();
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}

	}

}

服务器端代码Servicer.java
import java.io.*;
import java.net.*;
public class Servicer implements Runnable {

	
	private Socket s=null;
	public Servicer(Socket s)
	{
		this.s=s;
	}
	@Override
	public void run() {
		// TODO Auto-generated method stub
		try {
			InputStream ips=s.getInputStream();//接收客户端的信息作为输入流
			OutputStream ops=s.getOutputStream();//向客户端发送信息作为输出流
			
		    BufferedReader br=new BufferedReader(
		    		new InputStreamReader(ips));
		    PrintWriter pw=new PrintWriter(ops,true);
		   
			while(true)
			{
				String strLine=br.readLine();//接收客户端输入的一行数据,回车后结束
				if(strLine.equalsIgnoreCase("quit"))
				{
					break;
				}
				System.out.println("ReverseServer socket receive :"+strLine);
				String strEcho=(new StringBuffer(strLine).reverse()).toString();//把客户输入的字符串倒序
				 pw.println(strLine+"----->"+strEcho);//把倒序结果通过输出流返回给客户端
				 
				 //System.out.println("ReverseServer output :"+strLine+"----->"+strEcho);
			}
			br.close();
			pw.close();
			s.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

}

客户端代码TcpClientc.java
import java.net.*;
import java.io.*;
public class TcpClientc {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//无参数时执行该提示语句
        if(args.length<2)
        {
        	System.out.println("Usage:java TcpClient ServerIP ServerPort ");
        	return;
        }
//        Socket s=new Socket(InetAddress.getByAddress(args[0]),
//        		Integer.parseInt(args[1]));
        //有参数,使用Ip,Port进行客户端和服务器端的连接
        try {
			Socket s=new Socket(args[0],
					Integer.parseInt(args[1]));
			InputStream ips=s.getInputStream();
			OutputStream ops=s.getOutputStream();
		    BufferedReader brNet=new BufferedReader(
		    		new InputStreamReader(ips));
		    PrintWriter pw=new PrintWriter(ops,true);
		    
		    BufferedReader brKeyBoard=new BufferedReader(
		    		new InputStreamReader(System.in));
		    System.out.println("TcpClientc input :"+brKeyBoard.readLine());
		    while(true)
		    {
		    	String strWord=brKeyBoard.readLine();//读取键盘一行数据
		    	//通过输出流把数据发送到服务器端
		    	pw.println(strWord);
		    	if(strWord.equalsIgnoreCase("quit"))
		    	{
		    		break;
		    	}
		    	//通过输入流读取服务器回送的数据
		    	System.out.println("TcpClientc output from Server :"+brNet.readLine());
		    }
		    pw.close();
		    brNet.close();
		    brKeyBoard.close();
		    s.close();
		    
		} catch (NumberFormatException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (UnknownHostException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

在一个控制台启动Reverse
java ReverseServer 8001
然后再在另一个控制台启动TcpClientc
调用主函数的参数 java TcpClientc localhostip (loaclhostprot)8001
//那么该客户端就会和ReverseServer这个服务器端的代码进行交互通讯了
0
4
分享到:
评论
1 楼 lliiqiang 2015-09-15  
与客户端交互,必须做到能够让使用者得到相应地服务,真实地获取信息和反馈真实意思。

相关推荐

Global site tag (gtag.js) - Google Analytics