`
zhuozhuobeauty
  • 浏览: 17153 次
  • 性别: Icon_minigender_2
社区版块
存档分类
最新评论

时隔几个月,回归博客——关于通信的一点点想法

    博客分类:
  • java
 
阅读更多


  2014年3月26日的凌晨,我终于开始零零碎碎的写时隔几个月以后的第一篇博客。说来惭愧,荒废了许久的博客,重新打开看着上一篇博客的日期,回想自己这一段时间在技术上的空白期,心里有点堵。酝酿了很多天,却没能酝酿出一篇惊天地泣鬼神的好技术文章,说起技术,我真的是很渣很渣,所以下面还是谈一下这一段时间在通信这方面取得的进展吧。</p>
一、前期——实现服务器,多客户端,及其连接</strong></span></p>
从一个最简单的只能发送欢迎信息的服务器开始,一步步实现到了多客户端,用到了许多以前的知识,包括线程等,还有全新的知识,比如数据库,我承认这确实照着胡哥的抄的,确实没有创新。。。我想说的是在这些过程中我遇到的问题:


第一个,客户端服务器连接问题。我非常大胆的用自己的客户端连自己的服务器了。。。所以出现了

这个问题完全是因为我没有细心的检查,服务器的IP地址跟客户端连接的不一样</p>
第二个问题,服务器进入死循环。</p>


这个是什么问题呢?我找啊找,找啊找,找到头发都白了,才发现

这一条语句,还有后面的password都是+了“\r\n”的,实际上并不需要它,当我每次输入完毕以后,再次点击回车的时候,就会出现进入死循环的现象,胡哥的代码中特别标注了要加上\r\n,我不知道为什么会跟我写的出现冲突
代码不详细的进行说明了,下面是核心的代码,服务器线程的实现。

package NPlayerChat;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;

public class ServerThread extends Thread {

private Socket client;
private OutputStream ous;
private UserInfo user;

public ServerThread(Socket cl){
client=cl;
}

public void run()
   {

   processSocket();
   }

public UserInfo getOwerUser() {
// TODO Auto-generated method stub
return this.user;
}


//读取客户机消息的方法
private void processSocket() {
try {
InputStream ins=client.getInputStream();
ous=client.getOutputStream();
BufferedReader brd= new BufferedReader(new InputStreamReader(ins));
sendMsg2Me("                      你好,欢迎来到三水聊天室~~\r\n\r\n\r\n"+
"            ************************************\r\n"+
"            * To live is to change the world   *\r\n"+
"            *                                  *\r\n"+
"            *                       ——Jobs   *\r\n"+
"            ************************************\r\n请输入用户名:" );
String userName=brd.readLine();
sendMsg2Me(userName+",请输入你的密码:");
String pwd=brd.readLine();
user=new UserInfo();
user.setName(userName);
user.setPassword(pwd);
//调用数据库模块,验证用户是否存在
if(!DaoTools.checkLogin(user)){//不存在这个用户账号则关闭
this.closeMe();
return ;
}
ChatTools.addClient(this);
String input=brd.readLine();
while(!input.equals("bye")){
//读到消息后就发送给其他客户机
ChatTools.castMsg(this.user,input);
input=brd.readLine();//向下读取
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ChatTools.castMsg(this.user, "我下线了,再见!!");
this.closeMe();//调用服务器管理方法
}
//关闭线程
private void closeMe() {
try {
client.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

//将一条消息发送给这个线程对象所代表的客户机, 传入前,不需要加上\r\n,
public void sendMsg2Me(String msg) {
try{
msg+="\r\n";
ous.write(msg.getBytes());
ous.flush();
}catch(Exception ef){}

}





 二、中期——让我的聊天室有个简单界面

 


实现了群聊的有界面的简单聊天室,就这样出炉了。
这只是一小步,后面会持续跟进我最近在看的协议等等东西。
这仅仅是第二步,我必须说,这些代码我没有实现自己的创新和灵活运用,还停留在看胡哥的代码,模仿胡哥代码的低级水平上,没有任何的意义,这就是我不敢厚颜无耻的把大段的代码贴上来的原因
今天的这篇博客,其实我想记录一下自己最近的心情,关于技术的,关于其他乱七八糟的。
我已经很久没有过像暑假那时候为了一个程序晚上不肯睡觉的经历了,我已经很久没有自己动脑筋思考去实现自己的想法了,我一直在模仿,甚至抄袭,我不敢跟别人说我曾经做过什么项目,因为那都不是我自己的东西,说出去会觉得很心虚。最近一些感情上的琐事,还有家里面的事情搞得我很是烦躁。我不想碰代码,懒得动脑筋,思维麻痹,各种盲目的,负面的情绪笼罩着我,而我还不自知。。。。。。大学已经过去一半了,我做了什么呢。。。怀疑自己。。。又有点儿慌张。。。于是决定着手去做一个仿微信的项目,才刚刚起步,决心不能在当一个酱油了~~这次是自己真心想做的事情就不能再半途而废了~~以此来激励自己,加油微笑微笑 

  • 大小: 33.7 KB
  • 大小: 33.7 KB
  • 大小: 2.4 KB
  • 大小: 4.3 KB
  • 大小: 9.8 KB
  • 大小: 10.1 KB
  • 大小: 31.1 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics