要求:从客户端输入数据,传输到服务端,将数据的字符转换成大写并返回给客户端,不考虑中文字符和特殊字符;
思路:客户端:
1,建立socket服务;
2,获得键盘输入流,并将数据输出;
3,输入流来读取从服务端端传来的数据;
4,将这些数据打印到控制台上。
<span style="font-size:18px;">
import java.io.*;
import java.net.*;
public class TcpClientDemo3 {
public static void main(String[] args) throws Exception {
// 创建一个流套接字并将其连接到指定 IP 1270.0.1 地址的指定端口号10007。
Socket s = new Socket("127.0.0.1", 10007);
// 字符缓存流来读取系统能输入的数据
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 获得Scoket的输出流
OutputStream outs = s.getOutputStream();
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(outs));
// 获得Scoket的输入流
BufferedReader bur = new BufferedReader(new InputStreamReader(s
.getInputStream()));
String str = null;
// 循环都取数据
while ((str = br.readLine()) != null) {
bw.write(str);
// 换行
bw.newLine();
// 刷新该流的缓冲。
bw.flush();
// Scoket输入流来读取从服务端传过来的数据;
String upperLine = bur.readLine();
// 打印获得的数据
System.out.println(upperLine);
}
// 关闭输出流
try {
bw.close();
} catch (Exception e) {
//若发生异常则,打印出异常信息;
e.printStackTrace();
}
// 关闭Socket
try {
s.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
</span>
服务端:
1,建立ServerSocket服务;
2,从监听的套接字中获得数据;
3,将数据变成大写字符;
4,转换后的字符,写入输出流中,返回给客户端套接字;
<span style="font-size:18px;">
import java.io.*;
import java.net.*;
public class TcpServerDemo3 {
public static void main(String[] args) throws Exception {
//建立ServerSocket服务,并监听10007端口;
ServerSocket ss = new ServerSocket(10007);
//侦听并接受到此套接字的连接。
Socket s = ss.accept();
//服务端接受的套接字的输入流
BufferedReader br = new BufferedReader(new InputStreamReader(s
.getInputStream()));
//服务端监听的套接字的输出流
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s
.getOutputStream()));
String str = null;
while ((str = br.readLine()) != null) {
//打印从输入流读取的额数据
System.out.println(str);
//将小写字符变成大写字符
str = str.toUpperCase();
//将数据写到输出流中
bw.write("server:"+str);
//换行
bw.newLine();
//刷出缓冲流中的数据
bw.flush();
}
//结束将监听到的套接字关掉,这时不能将建立ServerScoket 关闭;
s.close();
}
}
</span>