客户端与服务器出错原因总结

客户端代码:

package com.sjl.ServerAndClient;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;

public class Client1 {
        public static void main(String[] args) {
                Socket mysocket = null;
                DataInputStream in = null;
                DataOutputStream out = null;
                String str = null;
                try {
                        mysocket =  new Socket("localhost",1420);
                } catch (IOException e) {System.out.println("无法连接");}
               
                try{
                        in = new DataInputStream(mysocket.getInputStream());
                        out = new DataOutputStream(mysocket.getOutputStream());
               
                for(int i=1;i<=100;i++){
                        str = in.readUTF();
                        out.writeInt(i);

                        System.out.println("客户端收到:"+str);
                        Thread.sleep(500);
                }
                }catch (Exception e){}
        }
}


服务器端代码:
package com.sjl.ServerAndClient;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class Server1 {
        public static void main(String[] args) {
                ServerSocket server= null;
                Socket you = null;
                DataInputStream in = null;
                DataOutputStream out = null;
               
                try{
                        server = new ServerSocket(1420);
                        you = server.accept();
                }catch (IOException e1){
                        System.out.println("连接不上");
                }
               
                try{
                        in = new DataInputStream(you.getInputStream());
                        out = new DataOutputStream(you.getOutputStream());
                        int m = 0;
                        while(true){
                        m = in.readInt();
                        out.writeUTF("你说的数字对应的字符为"+(char)m);
                        System.out.println("服务器收到:"+m);
                        Thread.sleep(500);
                        }       
                }catch(IOException e){
                        System.out.println(""+e);
                }catch(InterruptedException e2){}
               
               
        }
}

首先运行server1后运行Client1   控制台一直没有输出,也没有报错!

后来发现是这个原因:

客户端里面的代码:

   str = in.readUTF();

   out.writeInt(i);

in.readUTF()是客户端从服务器那里获得字符串。

out.writeInt(i)是客户端把数据发送个服务器。

按道理说是没有问题,而且我们经常说代码顺序一般不会有很高的要求,所以我自己在检查的时候也没有想到是这个问题。服务器是收到客户端的数据之后才返回给客户端一个数据,而现在上面的程序的顺序是接受服务端的数据在传输据,这个显而易见,客户端接受不到服务器的数据,不会向下面运行了。

所以在以后的编程中要更改自己的思想,特别是在客户端与服务器之间的网络编程应该注意编码的顺序!!!

以此为戒!!

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值