`
lengyimeng
  • 浏览: 26417 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

关于socket编程的一个很有意思的问题

    博客分类:
  • java
阅读更多
先贴上两段代码:
服务端ServerCode.class的
public class ServerCode {

public static int portNo = 3333;
public static void main(String[] args) throws IOException{
ServerSocket ss = new ServerSocket(portNo);
System.out.println("The Server is start: " + ss);
Socket s = ss.accept();
try{
System.out.println("Accept the Client: " + s);
BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(s.getOutputStream())),true);
while(true){
String str = in.readLine();
if(str.equals("byebye")){
break;
}
System.out.println("In Server reveived the info: " + str);
                 out.println(str);
}
}catch(Exception e){
e.printStackTrace();
}finally{
System.out.println("close the Server socket and the io.");
ss.close();
s.close();
}
}
}

客户端 ClientCode的
public class ClientCode {

public static String clientName = "xiaodai";
public static int portNo = 3333;
public static void main(String[] args) throws IOException {
InetAddress addr = InetAddress.getByName("localhost");
Socket socket = new Socket(addr, portNo);
try{
System.out.println("socket-----------"+socket);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
out.println("Hello Server,I am "+clientName);
String str = in.readLine();
System.out.println(str);
out.println("byebye");
}catch(Exception e){
e.printStackTrace();
}finally{
System.out.println("close the Client socket and the io.");
socket.close();
}
}

}

问题的引出:
首先说明下,这两段代码是我在网上下载的一篇学习socket编程上的,问题出现在客户端ClientCode这个类中,里面有这样两段代码out.println("Hello Server,I am "+clientName);和out.println("byebye");刚开始我没注意,把out.println写成了out.print,结果程序就卡住了,finally部分都执行不了,后面我仔细对照文章看了下,唯一不同的就是这了,所以抱着试试的心态改过来了,没想到居然就可以了。
一点想法:
通过这个例子我就在想,以前吧很少会注意print和println的区别,因为感觉他们的区别就是多了个换行,但在这里感觉print跟println区别挺大的,println比print多执行了一次按回车键的操作,因为只有这样才能解释当我们在控制台输入东西以后按回车键才能接收,用print就一直在输入状态,而没有提交状态。
呵呵,这是我自己的一点想法,或许这都不算个问题了,只是觉得自己第一次发现,或者第一次想到,所有记录下。欢迎批评指正。
0
0
分享到:
评论
2 楼 lengyimeng 2012-06-08  
ivorking 写道
server端调用的是getline,只有当检查到\n时才认为结束
所以客户端,prinfln是会在字符串结尾自动补一个\n,所以程序正常执行

谢谢
1 楼 ivorking 2012-06-07  
server端调用的是getline,只有当检查到\n时才认为结束
所以客户端,prinfln是会在字符串结尾自动补一个\n,所以程序正常执行

相关推荐

    windows socket编程 doc版

    windows 网络编程,WORD格式,非常有意思,值得一下,初学网络编程则更适合

    TCP UDP高级编程:一个VC++服务端程序

    内容索引:VC/C++源码,网络相关,UDP TCP UDP高级编程:一个VC++服务端程序,可选择Socket类型,是UDP还是TCP,这仅是个服务器端程序,不过也可发送消息哦,例子虽然简单了点,但可以说明不少的问题,有意思的自己...

    java源码包---java 源码 大量 实例

    一个目标文件,演示Socket的使用。 Java 组播组中发送和接受数据实例 3个目标文件。 Java读写文本文件的示例代码 1个目标文件。 java俄罗斯方块 一个目标文件。 Java非对称加密源码实例 1个目标文件 摘要:Java...

    java源码包2

    一个简单的CS模式的聊天软件,用socket实现,比较简单。 凯撒加密解密程序 1个目标文件 1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 简单 EJB的真实世界模型(源...

    java源码包3

    一个简单的CS模式的聊天软件,用socket实现,比较简单。 凯撒加密解密程序 1个目标文件 1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 简单 EJB的真实世界模型(源...

    java源码包4

    一个简单的CS模式的聊天软件,用socket实现,比较简单。 凯撒加密解密程序 1个目标文件 1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 简单 EJB的真实世界模型(源...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...

    JAVA上百实例源码以及开源项目源代码

    一个目标文件,演示Socket的使用。 Java 组播组中发送和接受数据实例 3个目标文件。 Java读写文本文件的示例代码 1个目标文件。 java俄罗斯方块 一个目标文件。 Java非对称加密源码实例 1个目标文件 摘要:Java...

    JAVA上百实例源码以及开源项目

    一个简单的CS模式的聊天软件,用socket实现,比较简单。 凯撒加密解密程序 1个目标文件 1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 简单 EJB的真实世界模型(源代码...

    基于SIP开发软件电话的一些资源(转自YOUTOO)

    熟悉后再一个函数一个函数地深入学习exosip提供的接口函数,就可以深入理解osip 了,达到间接学习oSIP的目的,同时也能从eXoSIP中学习到正确使用oSIP的良好的编程风格和语法格式。 而要成功编译...

Global site tag (gtag.js) - Google Analytics