利用TCP协议通过Socket编写的网络聊天工具2-通用类设计
2012-05-14 16:51
513 查看
在上一节中,还有即将给出的服务器代码,都使用了共同的工具类,包括一个Command类,用来负责表示通讯中的命令控制,一个ServerConfig类,用来表示服务器的配置,这个在客户端中也要使用,还有一个验证用户信息的类,在客户端使用。因为这三个类的通用新比较高,所以单独用一个dll工程来开发的这三个类,这样在客户端工程和服务器端工程中直接可以添加这个新的工程的DLL的引用。
整个项目源码下载地址:http://download.csdn.net/detail/weixingstudio/4301232
Command类:
ServerConfig类:
VerifyUserInfo类:
整个项目源码下载地址:http://download.csdn.net/detail/weixingstudio/4301232
Command类:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections.Specialized; using System.Runtime.Serialization; using System.IO; using System.Runtime.Serialization.Formatters.Binary; namespace UtilityClass { /// <summary> /// 通讯系统用的命令 /// </summary> public class Command { public const string Connect = "00"; // 连接 public const string ConnectConfirm = "01"; // 连接确认 public const string DisConnect = "02"; // 请求离开 public const string RequestOnlineUser = "03"; // 请求在线用户列表 public const string VibrateAll = "04"; // 请求对所有人震动 public const string VibrateOne = "05"; // 请求对某人震动 public const string BroadcastAll = "06"; // 对所有人广播消息 public const string SendMessage2One = "07"; // 对指定人传送消息 public const string RedundantUserName = "10"; // 重复的用户名 public const string SomeoneConnected = "11"; // 通知有人上线 public const string SomeoneLeaveUnexpected = "12"; // 某人异常离开 public const string SomeoneLeave = "13"; // 有人离开 public const string ServerShutdown = "14"; // 服务器关闭 public const string ExceedMaxAllowedNumber = "15"; // 超出最大的允许连接数 public const string SendOnlinUserList = "16"; // 发送用户列表 /// <summary> /// 编码命令,返回命令的字节流 /// </summary> /// <param name="cmd">需要编码的命令</param> /// <returns>返回字节流</returns> public static byte[] EncodeCommand(string cmd) { byte[] command_byte = Encoding.Unicode.GetBytes(cmd); return command_byte; } /// <summary> /// 解码系统命令,返回字符串 /// </summary> /// <param name="cmd">待解码的密令</param> /// <returns>返回字符串</returns> public static string DecodeCommand(byte[] cmd) { string cmd_string = Encoding.Unicode.GetString(cmd).TrimEnd('\0'); return cmd_string; } /// <summary> /// 序列化在线用户列表 /// </summary> /// <param name="onlineuser">序列化数组</param> /// <returns>返回结果</returns> public static byte[] SerializeOnlineUser(string[] onlineuser) { StringCollection onlineuserCollection = new StringCollection(); foreach (string user in onlineuser) { onlineuserCollection.Add(user); } IFormatter formatter = new BinaryFormatter(); MemoryStream stream = new MemoryStream(); formatter.Serialize(stream, onlineuserCollection); byte[] result = stream.ToArray(); stream.Close(); return result; } /// <summary> /// 反序列化在线用户列表 /// </summary> /// <param name="userbyte">输入的字节流</param> /// <returns>返回字符串集合</returns> public static StringCollection DeserializeOnlineUser(byte[] userbyte) { IFormatter format = new BinaryFormatter(); MemoryStream stream = new MemoryStream(); stream.Write(userbyte, 0, userbyte.Length); stream.Position = 0; StringCollection onlineList = (StringCollection)format.Deserialize(stream); return onlineList; } /// <summary> /// 检查要传送的消息是否正确 /// </summary> /// <param name="message"></param> /// <returns></returns> public static bool VerifyMessage(string message) { if (!message.Equals("")) { // 检查是否都是空格 char[] temp = message.ToArray(); bool flag = false; foreach (char c in temp) { if (c!=' '&& c!='\n' && c!=13) { flag = true; break; } } if (flag==true) { return true; } else { return false; } } else { return false; } } } }
ServerConfig类:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; namespace UtilityClass { public class ServerConfig { // server ip private string serverIP = "10.108.13.27"; // server port private int serverPort = 8888; // max buffer for receive data from client, 56K private int maxBuffer = 56 * 1024; // IPAddress private IPAddress ipAddress; // max allowed online user private int maxAllowedOnlineUser = 100; public ServerConfig() { // } public ServerConfig(string ip, int port) { this.serverIP = ip; this.serverPort = port; } public ServerConfig(string ip) { this.serverIP = ip; this.serverPort = 8888; } public ServerConfig(int port) { this.serverIP = "127.0.0.1"; this.serverPort = port; } /// <summary> /// 服务器IP地址 /// </summary> public string ServerIP { get { return serverIP; } set { serverIP = value; } } /// <summary> /// 服务器监听端口 /// </summary> public int ServerPort { get { return serverPort; } set { serverPort = value; } } /// <summary> /// 最大数据缓冲区 /// </summary> public int MaxBuffer { get { return maxBuffer; } set { maxBuffer = value; } } /// <summary> /// 最大客户端连接数量 /// </summary> public int MaxAllowedOnlineUser { get { return maxAllowedOnlineUser; } set { maxAllowedOnlineUser = value; } } } }
VerifyUserInfo类:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace UtilityClass { /// <summary> /// 验证用户输入数据用的类 /// </summary> public class VerifyUserInfo { /// <summary> /// 验证用户输入用户名的合法性 /// </summary> /// <param name="name">输入名</param> /// <returns>结果</returns> public bool VerifyUserName(string name) { if (name!="") { return true; } else { return false; } } /// <summary> /// 验证用户输入的IP知否正确 /// </summary> /// <param name="ip">输入字符串</param> /// <returns>输出结果</returns> public bool VerifyServerIP(string ip) { if (ip=="") { return false; } else { string[] ipA = ip.Split('.'); if (ipA.Length!=4) { return false; } else { int ip1, ip2, ip3, ip4; try { ip1 = int.Parse(ipA[0]); ip2 = int.Parse(ipA[1]); ip3 = int.Parse(ipA[2]); ip4 = int.Parse(ipA[3]); } catch (System.Exception ex) { return false; } if ((ip1>=0&&ip1<=255)&&(ip2>=0&&ip2<=255)&&(ip3>=0&&ip3<=255)&&(ip4>=0&&ip4<=255)) { return true; } else { return false; } } } } /// <summary> /// 验证用户输入端口 /// </summary> /// <param name="port">端口</param> /// <returns>结果</returns> public bool VerifyServerPort(string port) { if (port=="") { return false; } else { int port_int; try { port_int = int.Parse(port); } catch (System.Exception ex) { return false; } if (port_int>=1024&&port_int<=65535) { return true; } else { return false; } } } } }
相关文章推荐
- 利用TCP协议通过Socket编写的网络聊天工具3-服务器端设计
- 利用TCP协议通过Socket编写的网络聊天工具1-客户端
- 利用TCP和UDP协议,实现基于Socket的小聊天程序(初级版)
- 利用TCP和UDP协议,实现基于Socket的小聊天程序
- Socket网络程序设计(3) ———— 利用tcp完成文件传输的设计和实现
- JAVA之旅(三十二)——JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用
- 利用TCP传输协议实现基于Socket的聊天程序
- JAVA之旅(三十二)——JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用
- [置顶] JAVA进阶案例 TCP编程之网络聊天工具(服务端)
- Socket网络编程,TCP/IP和Http等网络协议理解
- Java网络编程,通过TCP,Socket实现多对一的局域网聊天室
- 移动网络应用开发中,使用 HTTP 协议比起使用 socket 实现基于 TCP 的自定义协议有哪些优势?
- 线程与网络编程(第六节:通信协议与TCP socket初识)
- 利用协议分析工具学习TCP/IP并捕获内网用户密码
- Java基础---Java---网络编程---TCP的传输、客户端和服务端的互访、建立一个文本转换器、编写一个聊天程序
- 利用TCP 实现通过网络复制文件夹中所有文件!
- 网络篇——七层协议、四层协议、TCP、HTTP、SOCKET、长短连接
- 网络七层协议、TCP/IP、UDP、HTTP、Socket 个人理解
- SOCKET,TCP/UDP,HTTP,FTP网络协议之间的关系
- 网络层、传输层、应用层、端口通信协议编程接口 - http,socket,tcp/ip 网络传输与通讯知识总结