需求:模拟一个大小转换器
将键盘输入的小写字母提交到服务器上转化为大写字母并打印
客户端:
package Intenetprogress;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.Reader;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
public class Tcpipclientbuilde2 {
public static void main(String []args) throws IOException, IOException
{
/*
* 客户端需求
* 1,将键盘输入的数据打印在控制台上
* 2.上传到服务端,由服务端把数据转化为大写
* 3.由服务端把转化为大写的数据发回到客户端
* 4客户端收到数据,并将数据打印到控制台上
*/
//1创建客户端的源
Socket s=new Socket(InetAddress.getLocalHost(),10000);
//2创建带缓冲区的转化流使键盘读取的数据可以高效,可以用字符缓冲区流的特有
//方法来操作数据,使数据易于处理
BufferedReader bfr=new BufferedReader(new InputStreamReader(System.in));
//3①读取由键盘录入的数据
//②获取socket输出流对象,将键盘录入的数据发送到服务端
PrintWriter pw=new PrintWriter(s.getOutputStream(),true);
//读取服务器传输的数据
BufferedReader bfrin=new BufferedReader (new InputStreamReader(s.getInputStream());
String str=null;
while((str=bfr.readLine())!=null)
{
if(str.equals("over"))
break;
pw.println(str);
String test=bfrin.readLine();
System.out.println(test);
}
s.close();
}
}
服务端:
package Intenetprogress;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class TCPipservebuilde2 {
public static void main(String []args)
{
/*
* 步骤
* 1,创建服务端socket源
* 2.获取客户端对象
* 3.获取客户端对象的读取流,进行对客户端数据的读取
* 4.把客户端的数据转化为大写发送到客户端
* ①获取服务端的输出流
* ②写出数据
*/
ServerSocket ss=new ServerSocket(10000);
Socket s=ss.accept();
BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream());
PrintWriter pw=new PrintWriter(s.getOutputStream(),true);
String line=null;
while((line=br.readLine())!=null)
{
System.out.println(line);
pw.println(line.toUpperCase());
}
s.close();
ss.close();
}
}
要点
①PrintWriter流可以接受字节或字符流对象,其中的println方法中有多种形参。可以保证输出的数据类型不改变。
②readline 方法是阻塞塞方法,只有读到换行标记时会返回数据
③printwriter中的println方法中自动在结尾调用print(),print()就是进行一次回车
如果在printwrite构造方法加上true,则会在println等方法后调用flush
④每次调用输出时记得刷新,否则只存到流的缓冲区中,而没有传输