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

客户端输入一行字符串,服务器端进行倒序后返回给客户端。简单完成一个tcp交互过程。
[b]服务器端代码ReverseServer.java[/b]
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();
}

}

}

[b]服务器端代码Servicer.java[/b]
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();
}

}

}

[b]客户端代码TcpClientc.java[/b]
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();
}
}

}

[b]在一个控制台启动Reverse[/b]
java ReverseServer 8001
[b]然后再在另一个控制台启动TcpClientc [/b]
调用主函数的参数 java TcpClientc localhostip (loaclhostprot)8001
//那么该客户端就会和ReverseServer这个服务器端的代码进行交互通讯了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值