zoukankan      html  css  js  c++  java
  • 团队项目(四)

      由于我们技术方面大牛王以正同学的要求,我们将开发语言改为c#(软粉的要求啊)。之前的开发工作需要推倒重来T_T。不过程序框架、设计思路大体不变。软件正式命名为OpenTalk。

      目前用户端代码如下:

      

      1 using System;
      2 using System.Collections.Generic;
      3 using System.Drawing;
      4 using System.Linq;
      5 using System.Net;
      6 using System.Net.Sockets;
      7 using System.Text;
      8 
      9 namespace OpenTalk
     10 {
     11     class Client
     12     {
     13         private Socket socket;
     14         private SocketAsyncEventArgs receiveEvent;
     15         private volatile bool closed = true;
     16         private string name;
     17 
     18         public Client()
     19         {
     20             
     21         }
     22 
     23         public void Connect(string name, IPAddress address, bool pseudoClient)
     24         {
     25             this.name = name;
     26             SocketAsyncEventArgs e = new SocketAsyncEventArgs();
     27             e.RemoteEndPoint = new IPEndPoint(address, 8880);
     28             e.Completed += (sender, args) =>
     29             { //连接服务器
     30                 if (args.SocketError == SocketError.Success)
     31                 {
     32                     closed = false;
     33                     MainForm.INSTANCE.PrintInfo("连接成功", "");
     34                     if (!pseudoClient)
     35                         MainForm.INSTANCE.SetClientControls();
     36                     socket.Send(Encoding.Default.GetBytes(name)); //发送用户姓名
     37                     receiveEvent = new SocketAsyncEventArgs();
     38                     receiveEvent.SetBuffer(new byte[1024], 0, 1024);
     39                     receiveEvent.Completed += ReceiveEventOnCompleted;
     40                     socket.ReceiveAsync(receiveEvent);
     41                 }
     42                 else
     43                 {
     44                     MainForm.INSTANCE.PrintInfo("连接失败", "连接错误:" + args.SocketError);
     45                     MainForm.INSTANCE.FreeControls();
     46                 }
     47             };
     48             socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
     49             socket.ConnectAsync(e);
     50         }
     51 
     52         //处理接受到的服务器信息
     53         private void ReceiveEventOnCompleted(object sender, SocketAsyncEventArgs socketAsyncEventArgs)
     54         {
     55             if (socketAsyncEventArgs.BytesTransferred > 0)
     56             {
     57                 byte[] info = socketAsyncEventArgs.Buffer;
     58                 string s = Encoding.Default.GetString(info, 1, info.Length - 1);
     59                 switch (info[0])
     60                 {
     61                     case 0: //如果是聊天信息
     62                         string sdr = s.Substring(0, s.IndexOf(':'));
     63                         string message = s.Substring(s.IndexOf(':') + 1);
     64                         MainForm.INSTANCE.PrintInfo(sdr, message,
     65                             sdr.Equals(name) ? Color.Green : Color.Blue);
     66                         break;
     67                     case 1: //如果是用户列表
     68                         string[] users = s.Split(new char[] {':'}, StringSplitOptions.RemoveEmptyEntries);
     69                         MainForm.INSTANCE.ShowUsers(users);
     70                         break;
     71                 }
     72                 Array.Clear(socketAsyncEventArgs.Buffer, 0, socketAsyncEventArgs.Buffer.Length);
     73                 socket.ReceiveAsync(receiveEvent);
     74             }
     75             else
     76             {
     77                 if (!closed)
     78                 {
     79                     closed = true;
     80                     MainForm.INSTANCE.PrintInfo("远端主机已关闭", "");   
     81                 }
     82                 socket.Close();
     83                 MainForm.INSTANCE.FreeControls();
     84             }
     85         }
     86 
     87         public void Send(string s)
     88         {
     89             var sendEvent = new SocketAsyncEventArgs();
     90             if (s.Length == 0)
     91                 s = " ";
     92             byte[] info = Encoding.Default.GetBytes(s);
     93             sendEvent.SetBuffer(info, 0, info.Length);
     94             socket.SendAsync(sendEvent);
     95         }
     96 
     97         public void Disconnect()
     98         {
     99             if (!closed)
    100             {
    101                 closed = true;
    102                 MainForm.INSTANCE.PrintInfo("已同主机断开连接", "");
    103             }
    104             socket.Send(new byte[] {0});
    105             socket.Close();
    106             MainForm.INSTANCE.FreeControls();
    107         }
    108     }
    109 }
  • 相关阅读:
    [Java123] 方法重载中遇到的编译器错误: both methods have same erasure => 引入Java泛型type erasure
    [Java123] 认识JavaBean
    [Java123] HashMap实现和应用
    [Java123] 开源工具guava比较器链ComparisonChain (附加比较null空值的实现方法)
    [Java123] Java的异常处理机制
    [ORACLE123] sysdate处理
    Linux进程实时可视化监控
    【Java123】ThreadLocal学习笔记
    【XML123】了解XMLUnit
    字符串%s
  • 原文地址:https://www.cnblogs.com/bjut13070017/p/5602229.html
Copyright © 2011-2022 走看看