本帖最后由 潘廖明 于 2013-5-4 10:20 编辑
- package net;
- import java.io.BufferedReader;
- import java.io.BufferedWriter;
- import java.io.InputStreamReader;
- import java.io.OutputStreamWriter;
- import java.net.Socket;
- public class TcpClient2
- {
- /**
- * 需求:从键盘录入数据,通过Tcp协议向服务端发送,服务端接收到后将数据转换成大写字母,然后返回给用户。
- * 数据可以实现不断录入、当遇到指定over字符的时候停止。
- *
- * @param args
- */
- public static void main(String[] args) throws Exception
- { // 新建一个客户端套接字服务,同时指定目的IP与接收端口
- Socket socket = new Socket("192.168.0.104", 10004);
- // 新建一个键盘的录入的缓冲区
- BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
- // 定义一个套接字通信的输入流的缓冲区
- BufferedReader bufr1 = new BufferedReader(new InputStreamReader(socket.getInputStream()));
- // 定义一个套接字通信的输出流的缓冲区
- BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
- String str;
- // 实现从键盘读取数据然后向套接字通信的输出流输出
- while ((str = bufr.readLine()) != null)
- {
- bufw.write(str);
- bufw.newLine();// 向Socket通信的输出流中输入一个换行标记
- bufw.flush();// 刷新缓冲区
- <FONT color=red> //1、会不会数据还没有返回就已经执行ufr1.readLine(),然后输出的结果为空?
- </FONT> String msg = bufr1.readLine();//A、从服务端读取数据
-
- System.out.println("Client=" + msg);//B、打印输出的结果
- }
- <FONT color=red> /*
- * 2、把 A、B出的代码注释掉、换成如下代码为什么没结果?
- *
- * String str1; while ((str1 = bufr1.readLine()) != null) {
- * System.out</FONT><FONT color=red>.println</FONT><FONT color=red>(str1); }</FONT>
- <FONT color=red>*/</FONT>
- bufr.close();
- socket.close();
- }
- }
复制代码- package net;
- import java.io.BufferedReader;
- import java.io.BufferedWriter;
- import java.io.InputStreamReader;
- import java.io.OutputStreamWriter;
- import java.net.ServerSocket;
- import java.net.Socket;
- public class TcpServer2
- {
- /**
- * @param args
- */
- public static void main(String[] args) throws Exception
- {
- // 建立服务套接字,同时指定监听的端口
- ServerSocket ss = new ServerSocket(10004);
- // 获取客户端的套接字
- Socket s = ss.accept();
- // 打印服务端的IP
- System.out.println("serverprot----" + s.getInetAddress().getHostAddress());
- // 定义一个套接字通信的输入流的缓冲区
- BufferedReader bufr = new BufferedReader(new InputStreamReader(s.getInputStream()));
- // 定义一个套接字通信的输出流的缓冲区
- BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
- String str1;
- while ((str1 = bufr.readLine()) != null)// 从输入缓冲区中读取数据,然后将其转换为大写字母
- {
- System.out.println("Server端接收的数据=" + str1);
- bufw.write(str1.toUpperCase());
- bufw.newLine();
- bufw.flush();// 刷新缓冲区
- // bufw.close();
- }
- s.close();// 关闭套接字,因为套接字与输入、输出流相关。只要关闭套接字。就不需要在关闭输入、输出流
- ss.close();// 关闭服务端端套接字
- }
- }
复制代码 |