我自己按照题目要求写了一个程序,实现服务器反转字符串发回来。我写完后在cmd里面运行,没有问题,为什么在eclipse上运行后会出现乱码?代码如下。- import java.io.DataInputStream;
- import java.io.DataOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.OutputStream;
- import java.net.ServerSocket;
- import java.net.Socket;
- /**
- ** 10、使用TCP协议完成一个客户端一个服务器。客户端从键盘输入读取一个字符串,发送到服务器。
- * 服务器接收客户端发送的字符串,反转之后发回客户端。客户端接收并打印。
- * * @param args */
- public class Test10_Server {
- public static void main(String[] args) {
-
- //定义一个逆序char[] nx, 定义一个顺序char[]sx。该数组用于后面反转
- char [] nx; char [] sx;
-
- //声明I/O流
- InputStream in = null;
-
- OutputStream out = null;
-
- try{
-
- //创建一个服务器
- ServerSocket ss = new ServerSocket(8888);
-
- try{
- boolean flag = true;
- while(flag){
-
- //监听skt
- Socket skt = ss.accept();
-
- //将in引用指向skt监听的输入流
- in = skt.getInputStream();
-
- //将out引用指向skt监听的输出流
- out = skt.getOutputStream();
-
- //在输入输出流外套接一个数据流
- DataInputStream din = new DataInputStream(in);
-
- DataOutputStream dout = new DataOutputStream(out);
-
- //对din使用readUTF()方法,并把值赋给ssx
- String ssx = din.readUTF();
-
- if(ssx.equals("exit")){
-
- flag = false;
- }
-
- //创建一个顺序char类型的数组,长度是ssx的长度
- sx = new char[ssx.length()];
-
- //创建一个逆序char类型的数组,长度是ssx的长度
- nx = new char[ssx.length()];
-
- //数组sx指向字符串ssx拆分后的数组
- sx = ssx.toCharArray();
-
- //实现逆序功能
- for(int i=0;i<sx.length;i++){
-
- nx[i] = sx[(ssx.length()-i-1)];
-
- }
-
- //字符串snx 是char的string值
- String snx = String.valueOf(nx) ;
-
- //使用dout输出流(dataOutputStream)将字符逆序字符string写回去
- dout.writeUTF(snx);
-
- //通道关闭
- din.close();
-
- dout.close();
-
- }
-
-
- //抓异常打印堆栈信息
- }catch(IOException e){
-
- e.printStackTrace();
- }
-
- }catch(IOException e){
-
- e.printStackTrace();
- }
- }
- }
复制代码- import java.io.BufferedReader;
- import java.io.DataInputStream;
- import java.io.DataOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.InputStreamReader;
- import java.io.OutputStream;
- import java.net.Socket;
- /**
- * 10、使用TCP协议完成一个客户端一个服务器。客户端从键盘输入读取一个字符串,发送到服务器。
- * 服务器接收客户端发送的字符串,反转之后发回客户端。客户端接收并打印。
- * @param args
- */
- public class Test10_Client {
- public static void main(String[] args) {
-
- //创建键盘标准输入流,对其使用bufferedreader包装
- BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));
-
- //创建I/O流
- InputStream is = null;
-
- OutputStream os = null;
-
- try{
- //初始化flag,是客服端在后面可以手动停止
- boolean flag = true;
-
- while(flag){
-
- //将键盘输入流赋值字符串s
- String s = sin.readLine();
-
- //判断是否是结束
- if (s.equals("exit")){
-
- flag = false;
-
- }
-
- //创建连接服务端
- Socket skt = new Socket("127.0.0.1",8888);
-
- //让输入输出流的引用指向skt的输入输入通道
- is = skt.getInputStream();
-
- os = skt.getOutputStream();
-
- //用data类对输入输出流进行包装
- DataOutputStream out = new DataOutputStream(os);
-
- DataInputStream in = new DataInputStream(is);
-
- //输出字符串s到服务器
- out.writeUTF(s);
-
- //读取服务器发过来的信息
- String nx = in.readUTF();
-
- //客户端答应nx
- System.out.println(nx);
-
- //关闭通道
- out.close();
- in.close();
- }
- //捕获异常,打印堆栈信息
- }catch(IOException e){
-
- e.printStackTrace();
-
- }
- }
- }
复制代码
|