主要模块: 1:客户端,2:服务端,3:SocketFactory,4:Connection连接对象,5:ConnectionCollection连接管理对象
测试:
/// 服务端 SocketLibrary.SocketFactory factory = new SocketLibrary.SocketFactory(); factory.StartServer(ip1, port1); /// 客户端 SocketLibrary.Connection conn = factory.StartClient(IPAddress.Parse(ip1), port1); SocketLibrary.SocketFactory.SendMessage("我的测试信息", conn);
1:客户端
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.Net.Sockets; namespace SocketLibrary { /// <summary> /// Socket 客户端 /// </summary> public class Client { // 超时时间,毫秒 public const int CONNECT_TIMEOUT = 10; public Client() { } /// <summary> /// 启动Socket客户端 /// </summary> /// <param name="ipaddress"></param> /// <param name="port"></param> /// <returns></returns> public static Connection StartClient(IPAddress ipaddress, int port) { TcpClient client = new TcpClient(); client.SendTimeout = CONNECT_TIMEOUT; client.ReceiveTimeout = CONNECT_TIMEOUT; client.Connect(ipaddress, port); Connection connection = new Connection(client.GetStream()); return connection; } } }
2:服务端
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net.Sockets; using System.Threading; namespace SocketLibrary { /// <summary> /// Socket 服务端 /// </summary> public class Server { private ConnectionCollection connections; public ConnectionCollection Connections { get { return connections; } set { connections = value; } } private TcpListener listener; private Thread listenningthread; public Server(TcpListener listener) { this.connections = new ConnectionCollection(); this.listener = listener; } public void Start() { while (true) { if (listener.Pending()) { TcpClient client = listener.AcceptTcpClient(); NetworkStream stream = client.GetStream(); this.connections.Add(new Connection(stream)); } } } /// <summary> /// 服务器端侦听消息 /// </summary> public void Listenning() { while (true) { Thread.Sleep(200); foreach (Connection connection in this.connections) { if (connection.NetworkStream.CanRead && connection.NetworkStream.DataAvailable) { byte[] buffer = new byte[1024]; int count = connection.NetworkStream.Read(buffer, 0, buffer.Length); Console.Write("================Server 服务器接受到的信息==================" + SocketFactory.encoding.GetString(buffer, 0, count)); } } } } /// <summary> /// 启动服务器监听 /// </summary> public void StartListen() { listenningthread = new Thread(new ThreadStart(Listenning)); listenningthread.Start(); } } }
3:SocketFactory
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Net.Sockets; using System.Net; namespace SocketLibrary { public class SocketFactory { private Thread serverListenThread; public static Encoding encoding = Encoding.GetEncoding("utf-8"); public void StartServer(string ip, int port) { IPAddress ipa = IPAddress.Parse(ip); TcpListener listener = new TcpListener(ipa, port); listener.Start(); Server server = new Server(listener); serverListenThread = new Thread(new ThreadStart(server.Start)); serverListenThread.Start(); server.StartListen(); } public Connection StartClient(IPAddress ip, int port) { return Client.StartClient(ip, port); } /// <summary> /// 发消息给服务器端 /// </summary> /// <param name="message"></param> /// <param name="connection"></param> public static void SendMessage(string message, Connection connection) { byte[] buffer = encoding.GetBytes(message); connection.NetworkStream.Write(buffer, 0, buffer.Length); } /// <summary> /// 获取服务器端返回的消息 /// </summary> /// <param name="message"></param> /// <param name="connection"></param> public static void GetMessage(Connection connection) { // connection.NetworkStream.Length; byte[] buffer = new byte[1024]; connection.NetworkStream.Write(buffer, 0, buffer.Length); } } }
4:Connection连接对象
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net.Sockets; namespace SocketLibrary { public class Connection { private NetworkStream networkStream; public NetworkStream NetworkStream { get { return networkStream; } set { networkStream = value; } } private string connectionName; public string ConnectionName { get { return connectionName; } set { connectionName = value; } } public Connection(NetworkStream networkStream, string connectionName) { this.networkStream = networkStream; this.connectionName = connectionName; } public Connection(NetworkStream networkStream):this(networkStream, string.Empty) { } } }
5:ConnectionCollection连接管理对象
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections; namespace SocketLibrary { public class ConnectionCollection : CollectionBase { public ConnectionCollection() { } public void Add(Connection conn) { List.Add(conn); } public Connection this[int index] { get { return List[index] as Connection; } set{ List[index] = value; } } public Connection this[string connectionName] { get { foreach(Connection connection in List) { if(connection.ConnectionName == connectionName) return connection; } return null; } } } }
相关推荐
本案例中,我们关注的是基于TCP协议的Socket通信,它提供了一个可靠的数据传输机制。 ### 服务器端(Server.php)代码解析 服务器端首先设置错误报告级别为E_ALL,确保所有错误信息都能被捕获并处理。然后设置无...
.NET Socket通信是一个基础且强大的网络编程工具,常用于构建客户端-服务器应用,实现不同设备间的通信。本示例提供了一个简单的.NET Socket通信方法,适用于初学者理解和实践。下面将详细介绍Socket通信的基本概念...
Socket通信建立在TCP/IP协议的基础上,为应用程序提供了一个统一的接口来访问底层的网络协议。 - **异步通信**:异步通信是指数据发送方发送数据后不等待接收方确认就可以继续发送后续数据,这提高了程序的执行效率...
综上所述,VB.NET(2008)的Socket通信涉及到网络编程的基础概念,包括创建Socket、绑定和监听、连接和断开、数据发送与接收等。通过提供的"vb.netsocket"资源,你可以进一步学习和实践这些知识,从而掌握Socket通信...
2. **绑定与监听**:客户端需要调用HPsocket的绑定函数,将本地IP和端口绑定到套接字上,然后开启监听,准备接收服务器发来的数据。 3. **发送数据请求**:在某些情况下,客户端可能需要向服务器发送数据请求,例如...
在这个例子中,客户端使用`Socket`连接到服务器的"localhost"(即本地主机)的8080端口。然后,通过`getOutputStream`和`getInputStream`方法获取到与服务器通信的数据流。 TCP协议保证了数据的可靠传输,它使用...
Socket通信的例子对于学习网络编程非常有价值,它能帮助开发者深入理解TCP/IP协议的工作原理,以及如何在C#中实现网络通信。通过实践这个例子,开发者可以掌握如何建立连接、发送和接收数据,为构建自己的网络应用...
以上就是关于"C#编写socket做服务器和客户端例子"的相关知识点。理解并掌握Socket编程对于开发网络应用至关重要,它可以帮助你构建稳定、高效的数据传输通道。在实践中,还可以结合其他技术,如多线程、异步IO、委托...
这两个程序为理解Socket通信机制提供了直观的实践,为进一步的网络编程学习打下了基础。通过这个例子,你可以学习到如何构建网络应用程序的基础架构,以及如何在C#中实现服务器和客户端的互动。
通过这两个组件,我们可以理解Socket通信的基本流程和原理。 首先,让我们从服务器端(Server)开始。在Java中,服务器通常使用`java.net.ServerSocket`类来监听特定的端口,等待客户端的连接请求。创建一个...
在Java中,`java.net.Socket`类和`java.net.ServerSocket`类是实现客户端和服务器通信的核心。 标题中的"例10.05 Socket客户端程序"很可能是一个示例项目,旨在展示如何创建一个基本的Java Socket客户端。这个...
`java.net.Socket`类用于创建客户端Socket,而`java.net.ServerSocket`类用于创建服务器端Socket。 2. **服务器端程序**: - **ServerSocket创建**:首先,服务器需要创建一个`ServerSocket`实例,指定一个端口号...
在C#中,`System.Net.Sockets.Socket`类是实现Socket通信的核心类。 在C#中,创建Socket对象并建立连接通常分为以下几个步骤: 1. 创建Socket实例:`Socket socket = new Socket(AddressFamily.InterNetwork, ...
在这个场景中,我们关注的是安卓客户端(Android)通过Socket与PC端的C#服务器进行通信。Socket是网络编程的基础,它允许两个程序通过网络交换数据。本篇文章将深入探讨如何实现这个过程,包括C#服务器和安卓客户端...
Socket编程是计算机网络通信中的重要概念,特别是在Android应用开发中,它允许设备通过TCP/IP协议进行数据传输。...通过学习这个例子,开发者能够掌握基本的Socket通信技巧,为进一步的Android网络编程打下坚实的基础。
在IT行业中,网络通信是软件开发的一...通过深入理解以上知识点,并实践这个“C# socket多线程通讯 含客户端”的例子,开发者能够熟练掌握C#中的Socket通信和多线程技术,为构建高效、稳定的网络应用程序打下坚实基础。
首先,Socket在C#中是System.Net.Sockets命名空间下的类,它提供了TCP/IP网络通信的基本功能。在WinForm应用中,我们可以创建一个新的Form来承载服务端和客户端的UI元素,如按钮、文本框和标签,以便用户交互和显示...
标签"Socket C#"提示我们关注的是C#环境下的Socket通信,这通常涉及服务器端(服务提供者)和客户端(服务请求者)的应用程序设计。服务器端通常会监听特定端口,等待客户端连接,并处理接收到的请求。客户端则会...
接着,我们来看C#中的Socket类,它是.NET Framework提供的用于TCP通信的接口。创建一个Socket对象后,可以通过设置其属性(如SocketType和ProtocolType)来指定使用TCP协议。然后,我们可以使用Bind方法绑定本地IP...
总结一下,Java Socket通信是通过`ServerSocket`和`Socket`类实现的,服务器端负责监听和接受连接,客户端负责发起连接并进行数据交换。理解并掌握这部分知识对于进行Java网络编程至关重要,特别是当需要开发基于TCP...