Let's go inside

this blog is deprecated as a result of laziness.
posts - 59, comments - 2, trackbacks - 0, articles - 0

用SWT写了一个类QQ聊天程序

Posted on 2007-01-07 21:19 Earth 阅读(1106) 评论(2)  编辑  收藏 所属分类: Eclipse

给一个陌生人做的作业,

要求如下:
编写一个TCP Socket程序,采用图形化的界面实现,在服务器可输入客户端的IP地址和端口号,程序根据该IP地址和端口号与客户端建立连接,在服务器端输入要发送的内容点击发送按钮,就可以发送到客户端,客户端只接收服务器端发送的消息。

正好在学SWT, 就一边学一边写了,可以到这里去下载源代码http://www.eclipseworld.org/bbs/read.php?tid=10290

凭记忆总结一下期间碰到的问题,一个是如果button要处理一个可能会阻塞或耗时的事件,那个事件处理的需要放在一个新的Thread里边。不然的话。界面没法响应其它的操作。

另外如果要在新的线程里操作SWT中的元素比如文本框。必须像下面这样处理。
 display.asyncExec(new Runnable() {
  public void run() {
   listenButton.setEnabled(false);
  }
 });
否则会抛出好像是什么invalid access的异常。

最后在进行Socket编程的时候要把防火墙关掉。否则会抛出JVM_bind之类等莫名其妙的错误

哈哈,今天又发现了一个问题。。就是改成keyReleased() 以后。。还是要按照那个回贴的人来做。String text = sendText.getText().trim() + lineS;

因为如果发送的消息末尾没有line.separator的话。。在客户端

       BufferedReader in = new BufferedReader(
         new InputStreamReader(socket
           .getInputStream()));
       while (true) {
        String str;
        while ((str = in.readLine()) != null) {
         append(lineS + str);
        }
        Thread.sleep(500);
       }
就收不到?。消息的末端必须要有断行符!呵呵。这样in.readLine()才算读到行尾才会打出来 。可以做一个试验。输入a,点按钮,client没反应,再输入b,点按钮,client没反应,再输入c, 这次用Ctrl + Enter发送。这样client一次打印出abc来。。呵呵 。!!明白了 !!!!!

Feedback

# re: 用SWT写了一个类QQ聊天程序[未登录]  回复  更多评论   

2012-12-17 16:20 by 啊啊
socket.getInputStream()提示错误了

# re: 用SWT写了一个类QQ聊天程序  回复  更多评论   

2012-12-17 21:23 by Earth
什么错误啊。post your stackTrace

只有注册用户登录后才能发表评论。


网站导航: