首页 > 应用开发 > IT综合 > Visual C#建立简单消息传递系统
| public static void Main() { IPAddress localAddr = IPAddress.Parse("127.0.0.1"); TcpListener listener = new TcpListener(localAddr, 9999); Console.WriteLine("Waiting for initial connection"); listener.Start(); Socket socket = listener.AcceptSocket(); Console.WriteLine("Connected"); NetworkStream stream = new NetworkStream(socket); BinaryReader reader = new BinaryReader(stream); BinaryWriter writer = new BinaryWriter(stream); int i = reader.ReadInt32(); i++; writer.Write(i); } |
| public enum MessageType { RequestEmployee = 1, Employee, } |
| public class RequestEmployee: ISocketObject { int id; public RequestEmployee(int id) { this.id = id; } } public RequestEmployee(BinaryReader reader) { id = reader.ReadInt32(); } public int ID { get { return id; } } public void Send(BinaryWriter writer) { writer.Write((int) MessageType.RequestEmployee); writer.Write(id); } } |
| RequestEmployee requestEmployee = new RequestEmployee(15); requestEmployee.Send(writer); MessageType messageType = (MessageType) reader.ReadInt32(); switch (messageType) { case MessageType.Employee: Employee employee = new Employee(reader); Console.WriteLine("{0} = {1}", employee.Name, employee.Address); break; } |
| public class SocketListener { int port; Thread thread; public SocketListener(int port) { this.port = port; ThreadStart ts = new ThreadStart(WaitForConnection); thread = new Thread(ts); thread.IsBackground = true; thread.Start(); } public void WaitForConnection() { // 主要的代码 } } |
| while (true) { Console.WriteLine("Waiting for initial connection"); listener.Start(); Socket socket = listener.AcceptSocket(); NetworkStream stream = new NetworkStream(socket); BinaryReader reader = new BinaryReader(stream); BinaryWriter writer = new BinaryWriter(stream); Console.WriteLine("Connection Requested"); int userPort = port + 1; TcpListener specificListener; while (true) { try { specificListener = new TcpListener(localAddr, userPort); specificListener.Start(); break; } catch (SocketException) { userPort++; } } //远程用户应该使用specificListener。 //把该端口发送回给远程用户,并为我们在该端口上建立服务器应用程序。 SocketServer socketServer = new SocketServer(specificListener); writer.Write(userPort); writer.Close(); reader.Close(); stream.Close(); socket.Close(); } |
| try { while (true) { MessageType messageType = (MessageType) reader.ReadInt32(); switch (messageType) { case MessageType.RequestEmployee: Employee employee = new Employee("Eric Gunnerson", "One Microsoft Way"); employee.Send(writer); break; } } } catch (IOException) { } finally { socket.Close(); } |
| public delegate void EmployeeHandler(Employee employee); public event EmployeeHandler EmployeeReceived; |
| case MessageType.Employee: Employee employee = new Employee(reader); if (EmployeeReceived != null) form.Invoke(EmployeeReceived, new object[] {employee}); break; |
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/8781179/viewspace-921312/ ,如需转载,请注明出处,否则将追究法律责任。