您的位置:首页 > 理论基础 > 计算机网络

TCP双向传输

2015-06-19 12:43 639 查看
TCP双向传输:

客户端通过键盘向服务端发送字符串,服务端接收到客户端发来的字符串进行翻转后,发送给客户端。

/*

思路:

1.客户端:源-键盘录入 目的-网络输出流 操作字符串-选择字符流

2.服务器端:源-输入流 目的-输出流

3.为提高效率,加入缓冲

服务器端步骤:

1.建立服务器socket服务

2.获取客户端对象

3.读取客户端发送过来的数据

4.将读取到的字符串反转

5.获取Socket流中的输出流,将反转后的字符串写到该输出流

6.关闭客户端资源,关闭服务器端资源

*/

//服务器端

class TcpServer
{
public static void main(String[] args)throws Exception
{
//建立服务器端Socket服务,并监听一个端口
ServerSocket ss=new ServerSocket(8089);

//通过accept方法获取连接过来的客户端对象
Socket s1=ss.accept();

//获取IP,打印IP连接上的标志
String ip=s1.getInetAddress().getHostAddress();

System.out.println(ip+"......connected");

//读取socket读取流中的数据
BufferedReader server_bufIn=
new BufferedReader(new InputStreamReader(s1.getInputStream()));

//将数据写入socket输出流,并发送给客户端
BufferedWriter server_bufOut=
new BufferedWriter(new OutputStreamWriter(s1.getOutputStream()));

//定义读取的一行数据
String str2=null;

//当读取的数据不为空时
while((str2=server_bufIn.readLine())!=null)
{

//以字符串形式打印读取到的数据
System.out.println("客户端:"+str2);

//将反转后的字符串写到该输出流
server_bufOut.write(reverse(str2));

//换行。因为字符存储在缓冲区,所以要刷新
server_bufOut.newLine();
server_bufOut.flush();
}

s1.close();
ss.close();

}

//字符串反转
public static String reverse(String str)
{
if(str !=null && str !="")
{
StringBuffer buf=new StringBuffer(str);
buf.reverse();
return buf.toString();
}
else
{
return "";
}
}
}


/*

客户端步骤:

1.建立socket服务

2.获取键盘录入

3.将数据发送给服务器。

4.获取服务端返回的数据,并打印

5.关闭客户端资源

*/

//客户端

class TcpClient
{
public static void main(String[] args)throws Exception
{
//建立客户端Socket服务
Socket s=new Socket("127.0.0.1",8089);

//定义读取键盘数据的流对象
BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));

//定义目的:将数据写入到socket输出流,发给服务端
BufferedWriter client_bufOut=
new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));

//定义一个socket读取流,读取服务端返回的反转字符串
BufferedReader client_bufIn=
new BufferedReader(new InputStreamReader(s.getInputStream()));

String strkey=null;

//读取键盘录入数据
while((strkey=bufr.readLine())!=null)
{
if("over".equals(strkey))
break;

//将键盘录入数据写入输出流输出
client_bufOut.write(strkey);
client_bufOut.newLine();
client_bufOut.flush();

//读取服务端返回的数据
String str1=client_bufIn.readLine();

//打印读取到的服务器返回数据
System.out.println("Server:"+str1);
}

//关闭键盘录入
bufr.close();

//关闭客户端资源
s.close();

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java