因项目需求,需使用socket收发消息,故有以下代码,先行保存,免得日后实际开发完无法还原
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Configuration;
using System.Data.SqlClient;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
private static byte[] result = new byte[1024];
private static int myProt = 8885; //端口
private static Socket serverSocket;
private static int ConnectCount = 0;
private static int MaxConnectCount = 3;
private static List<string> messageList = new List<string>();
static object objToLock = new object();
static void Main(string[] args)
{
//服务器IP地址
IPAddress ip = IPAddress.Parse("ip");
serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
serverSocket.Bind(new IPEndPoint(ip, myProt)); //绑定IP地址:端口
serverSocket.Listen(2); //设定最多10个排队连接请求
Console.WriteLine("启动监听{0}成功", serverSocket.LocalEndPoint.ToString());
new Thread(ListenClientConnect).Start();
Console.ReadLine();
}
/// <summary>
/// 监听客户端连接
/// </summary>
private static void ListenClientConnect()
{
while (true)
{
Socket clientSocket = serverSocket.Accept();
//clientSocket.Send(Encoding.UTF8.GetBytes("string###又来个逗比!mdzz"));
//Console.WriteLine("123");
//FileStream fs = new FileStream("D:/23.jpg", FileMode.Open);
//BinaryReader br = new BinaryReader(fs);
//Byte[] byData = br.ReadBytes((int)fs.Length);
//fs.Close();
//Console.WriteLine("2");
//clientSocket.Send(byData);
//Console.WriteLine("3");
if (ConnectCount < MaxConnectCount)
{
clientSocket.Send(Encoding.UTF8.GetBytes("又来个逗比!mdzz"));
Thread receiveThread = new Thread(ReceiveMessage);
receiveThread.Start(clientSocket);
}
else
{
clientSocket.Send(Encoding.UTF8.GetBytes("超过最大连接数"));
clientSocket.Close();
}
}
}
/// <summary>
/// 接收消息
/// </summary>
/// <param name="clientSocket"></param>
private static void ReceiveMessage(object clientSocket)
{
if (ConnectCount < MaxConnectCount)
{
ConnectCount++;
Socket myClientSocket = (Socket)clientSocket;
int receiveNumber = -1;
string userName = "";
while(userName.Equals(""))
{
Console.WriteLine("等待用户名");
receiveNumber = myClientSocket.Receive(result);
if (receiveNumber > 0)
{
userName = Encoding.UTF8.GetString(result, 0, receiveNumber);
Console.WriteLine("获取用户名:" + userName);
//发送数据
myClientSocket.Send(Encoding.UTF8.GetBytes("接收账号:" + userName));
}
}
int count = 0;
Boolean filestar = false;
MemoryStream ms = new MemoryStream();
while (true)
{
try
{
if (myClientSocket.Poll(-1, SelectMode.SelectRead))
{
//通过clientSocket接收数据
receiveNumber = myClientSocket.Receive(result);
if (receiveNumber > 0)
{
if (Encoding.UTF8.GetString(result, 0, receiveNumber).IndexOf("filestar")==0)
{
Console.WriteLine("接收客户端{0}消息{1}", myClientSocket.RemoteEndPoint.ToString(), Encoding.UTF8.GetString(result, 0, receiveNumber));
filestar = true;
}
if (filestar)
{
if (Encoding.UTF8.GetString(result, 0, receiveNumber).IndexOf("fileend") == 0)
{
Console.WriteLine("接收客户端{0}消息{1}", myClientSocket.RemoteEndPoint.ToString(), Encoding.UTF8.GetString(result, 0, receiveNumber));
FileStream fs = new FileStream("D:\\test.jpg", FileMode.OpenOrCreate);
BinaryWriter w = new BinaryWriter(fs);
w.Write(ms.ToArray());
fs.Close();
myClientSocket.Send(Encoding.UTF8.GetBytes("fielLength:" + ms.Length));
ms.Dispose();
count = 0;
}
else if(count==1)
{
ms.Write(result, 0, receiveNumber);
}else
{
count++;
}
}
//发送数据
//myClientSocket.Send(Encoding.UTF8.GetBytes("接收完成,数据反馈端口:" + myClientSocket.RemoteEndPoint.ToString()));
}
else if (receiveNumber==0)
{
//socket连接已断开
Console.WriteLine("断开");
myClientSocket.Close();
ConnectCount--;
break;
}
}
else
{
//socket连接已断开
Console.WriteLine("断开123");
myClientSocket.Close();
ConnectCount--;
break;
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
myClientSocket.Shutdown(SocketShutdown.Both);
break;
}
}
}
else
{
Console.WriteLine("超过最大链接客户端");
}
}
}
}
分享到:
相关推荐
本文将深入探讨如何使用C#实现Socket的高性能和大容量并发处理,并基于提供的完整实例源码进行解析。 首先,Socket是网络通信的基础组件,它为应用程序提供了一种在网络间发送和接收数据的方式。在C#中,我们通常...
在IT行业中,网络通信是不可或缺的一部分,而Socket编程则是实现这一功能的核心技术。本文将深入探讨如何使用C#语言来实现Socket编程,特别是在处理异步通信和解决TCP粘包问题的第三阶段。C#提供了丰富的类库支持...
本篇将详细解析"**C#实现Socket聊天室源码**"的相关知识点,帮助你深入理解如何利用C#进行Socket编程,创建一个简单的聊天室。 首先,Socket在计算机网络中扮演着客户端和服务器之间通信桥梁的角色。它允许两个网络...
在IT领域,网络通信是不可或缺的一部分,而C#语言提供了强大的Socket编程能力,使得开发者能够构建功能丰富的网络应用。在这个“C# Socket简单聊天”项目中,我们将探讨如何利用C#的Socket类来创建一个既能作为...
本文将深入探讨“C#超級套接字框架”(SuperSocket)这一核心知识点,帮助读者理解其基本概念、优势以及如何实现服务端和客户端的通信。 一、什么是C#超級套接字框架? SuperSocket是一个轻量级、可扩展的C# ...
本资源“基于HPSocket实现socket通讯 - 修正版 ( C# demo 、 C++ dll )”提供了一种实用的方法,帮助开发者高效地实现跨平台的网络通信功能。以下是关于HPSocket、Socket通讯以及其C#和C++实现的关键知识点: 1. **...
本教程将详细讲解如何使用C#的Socket库来实现一个简单的图片收发功能,涉及Server和Client端的交互以及多线程处理。 1. **Socket基础** Socket是网络通信的基本组件,它提供了进程间通过网络进行通信的接口。在C#...
此外,还会深入探讨如何通过C#的Socket类实现这些网络操作,以及如何结合多线程技术构建高性能的网络服务。 总之,学习并掌握C#的Socket网络编程,将使你具备构建网络应用的核心能力,无论是开发服务器程序、客户端...
在本文中,我们将深入探讨如何在C#中使用UDP(用户数据报协议)进行socket编程,以便收发数据。UDP是一种无连接的、不可靠的传输层协议,它提供了较低的延迟和较高的吞吐量,适合实时数据传输或对顺序传输要求不高的...
在C#中,Socket类位于System.Net.Sockets命名空间下,提供了丰富的功能来支持TCP和UDP协议。 1. **TCP(Transmission Control Protocol)通信**:TCP是一种面向连接的、可靠的传输协议,它确保了数据的有序和无损...
总结,C#中的Socket编程提供了构建聊天工具的基础,通过创建Socket实例、绑定和监听、接受连接、数据收发等步骤,我们可以实现一个简单的聊天应用。在实际开发中,还需要考虑更多的细节,如安全性、稳定性以及用户...
参照博客C# JSON和对象之间互相转换用Winform进行了JSON和对象之间转化的呈现,并用Socket来传输JSON。原文链接:http://www.cnblogs.com/HCCZX/p/5238556.html
在深入理解了SuperSocket的核心概念和主要功能后,开发者可以通过提供的文档和示例代码,快速搭建自己的Socket服务器,并实现高效稳定的网络通信。通过不断实践和优化,可以充分利用SuperSocket的强大能力,构建出高...
在本文中,我们将深入探讨如何使用C#的WPF(Windows Presentation Foundation)框架结合Socket UDP通信来实现与康耐视相机的实时无协议通讯。这是一个关键的技术应用,尤其是在工业自动化和图像处理领域。 首先,...
本示例主要涉及的是使用C# SuperSocket实现控制台应用程序与Web应用程序之间的通信。下面我们将深入探讨SuperSocket的工作原理、如何创建服务器和客户端,以及如何将它应用于Web环境。 首先,SuperSocket是一个轻量...
在C#中,我们可以利用System.Net.Sockets命名空间中的Socket类来实现客户端与服务器之间的通信。本实例主要探讨的是如何使用C#的Socket实现多客户端监听,即服务器能够同时处理多个客户端的连接请求。 首先,我们要...
C# Socket通信的源码,支持TCP和UDP收发二进制数据,如图片,视频,音频数据,或者是文本数据。也支持UDP收发数据。简单友好的API,可以直接拿来用。基于.NET Framework2.0的,只要高于2.0版本的Framework都可以正常...
在IT行业中,网络通信是软件开发的一个重要领域,特别是在分布式系统和互联网应用中...在提供的压缩包文件中,可能包含了实现这些功能的示例代码,通过学习和分析这些代码,开发者可以加深对C# Socket双向通信的理解。
在C#中,System.Net.Sockets命名空间提供了Socket类,用于实现TCP和UDP协议。TCP(传输控制协议)提供面向连接的、可靠的数据传输服务,而UDP(用户数据报协议)则是一种无连接、不可靠的服务,适用于对速度有高要求...
Socket编程在IT行业中是网络通信的基础,特别是在C#这样的编程语言中,Socket接口提供了与TCP/IP协议栈直接交互的能力。本篇文章将详细讲解C#中Socket客户端和服务端的封装,以及如何利用队列处理和实际应用示例。 ...