热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C#Socket使用简单测试示例

引用Newtonsoft.Json.dllusingNewtonsoft.Json;进行对象序列化和反序列化。服务端:usingSystem;usingSystem.Collect

引用Newtonsoft.Json.dll using Newtonsoft.Json; 进行对象序列化和反序列化。

服务端:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Newtonsoft.Json;
namespace ConsoleAppS
{
class Program
{
static void Main(string[] args)
{
IPAddress ip = IPAddress.Parse(args[0]);
int port = int.Parse(args[1]);
IPEndPoint iPEndPoint = new IPEndPoint(ip, port);
Socket socketS = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socketS.Bind(iPEndPoint);
socketS.Listen(10);
Console.WriteLine("开启服务:" + iPEndPoint.ToString());
while (true)
{
Socket socketC = socketS.Accept();
if (socketC.Connected)
{
Thread clientThread = new Thread(new ParameterizedThreadStart(MyClient));
clientThread.IsBackground = true;
clientThread.Start(socketC);
}
}
}
private const int BUFFER_SIZE = 1024; // 缓冲区大小
private static void MyClient(object socket)
{
Socket socketClient = socket as Socket;
try
{
byte[] buffer = new byte[BUFFER_SIZE];
while (true)
{
int countRcv = socketClient.Receive(buffer);
string rcvStr = Encoding.Default.GetString(buffer, 0, countRcv);
if (rcvStr[0] == '{')
{
object stuObj = JsonConvert.DeserializeObject(rcvStr);
Student stu = stuObj == null ? null : stuObj as Student;
if (stu != null)
{
Console.WriteLine("反序列对象:" + stu.ToString());
}
}
Console.WriteLine("服务端收到:" + socketClient.RemoteEndPoint.ToString() + " :" + rcvStr);
socketClient.Send(Encoding.Default.GetBytes("Ok! Server recevied"));
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
Console.WriteLine("客户端:" + socketClient.RemoteEndPoint.ToString() + "退出");
}
}
}
[Serializable]
public class Student
{
public string Name { get; set; }
public string Sex { get; set; }
public int Age { get; set; }
}
}

客户端:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft;
using Newtonsoft.Json;
namespace ConsoleAppC
{
class Program
{
static void Main(string[] args)
{
IPAddress ipAdr = IPAddress.Parse(args[0]);
int port = int.Parse(args[1]);
IPEndPoint ipEndP = new IPEndPoint(ipAdr, port);
int bufferSize = 1024;
int rcvCount;
byte[] buffer = new byte[bufferSize];
try
{
m_SocketClient.Connect(ipEndP);
Console.WriteLine($"链接服务器{ipEndP}成功...");
while (true)
{
m_COntent= Console.ReadLine();
if (m_COntent== "q" || m_COntent== "Q")
{
break;
}
if (m_COntent== "json")
{
Student stu = new Student
{
Name = "小明",
Sex = "难",
Age = 12
};
// Joson 序列化
m_COntent= JsonConvert.SerializeObject(stu);
}
m_SocketClient.Send(Encoding.Default.GetBytes(m_Content));
rcvCount = m_SocketClient.Receive(buffer);
Console.WriteLine(Encoding.Default.GetString(buffer, 0, rcvCount));
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
Console.ReadKey();
}
}
private static string m_Content;
private static Socket m_SocketClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
}
[Serializable]
public class Student
{
public string Name { get; set; }
public string Sex { get; set; }
public int Age { get; set; }
}
}



参考:



  • https://www.jb51.net/article/204058.htm

  • https://www.jb51.net/article/256530.htm



推荐阅读
  • C#中实现高效UDP数据传输技术
    C#中实现高效UDP数据传输技术 ... [详细]
  • 在Cisco IOS XR系统中,存在提供服务的服务器和使用这些服务的客户端。本文深入探讨了进程与线程状态转换机制,分析了其在系统性能优化中的关键作用,并提出了改进措施,以提高系统的响应速度和资源利用率。通过详细研究状态转换的各个环节,本文为开发人员和系统管理员提供了实用的指导,旨在提升整体系统效率和稳定性。 ... [详细]
  • Python 伦理黑客技术:深入探讨后门攻击(第三部分)
    在《Python 伦理黑客技术:深入探讨后门攻击(第三部分)》中,作者详细分析了后门攻击中的Socket问题。由于TCP协议基于流,难以确定消息批次的结束点,这给后门攻击的实现带来了挑战。为了解决这一问题,文章提出了一系列有效的技术方案,包括使用特定的分隔符和长度前缀,以确保数据包的准确传输和解析。这些方法不仅提高了攻击的隐蔽性和可靠性,还为安全研究人员提供了宝贵的参考。 ... [详细]
  • iOS 不定参数 详解 ... [详细]
  • 包含phppdoerrorcode的词条 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • Unity与MySQL连接过程中出现的新挑战及解决方案探析 ... [详细]
  • 本文详细解析了使用C++实现的键盘输入记录程序的源代码,该程序在Windows应用程序开发中具有很高的实用价值。键盘记录功能不仅在远程控制软件中广泛应用,还为开发者提供了强大的调试和监控工具。通过具体实例,本文深入探讨了C++键盘记录程序的设计与实现,适合需要相关技术的开发者参考。 ... [详细]
  • 本文详细介绍了一种利用 ESP8266 01S 模块构建 Web 服务器的成功实践方案。通过具体的代码示例和详细的步骤说明,帮助读者快速掌握该模块的使用方法。在疫情期间,作者重新审视并研究了这一未被充分利用的模块,最终成功实现了 Web 服务器的功能。本文不仅提供了完整的代码实现,还涵盖了调试过程中遇到的常见问题及其解决方法,为初学者提供了宝贵的参考。 ... [详细]
  • 在MFC框架中,存在多个全局函数,用于在不同对象间获取信息或创建新对象。其中,`afxGetApp`函数尤为关键,它能够帮助开发者轻松获取当前应用程序的实例指针。本文将详细解析`afxGetApp`函数的内部机制及其在MFC应用程序中的具体应用场景,探讨其在提升代码可维护性和灵活性方面的优势。此外,还将介绍其他常用全局函数如`AfxWinInit()`和`AfxBeginThread()`的功能和使用方法,为开发者提供全面的参考。 ... [详细]
  • Linux入门教程第七课:基础命令与操作详解
    在本课程中,我们将深入探讨 Linux 系统中的基础命令与操作,重点讲解网络配置的相关知识。首先,我们会介绍 IP 地址的概念及其在网络协议中的作用,特别是 IPv4(Internet Protocol Version 4)的具体应用和配置方法。通过实际操作和示例,帮助初学者更好地理解和掌握这些基本技能。 ... [详细]
  • malloc 是 C 语言中的一个标准库函数,全称为 memory allocation,即动态内存分配。它用于在程序运行时申请一块指定大小的连续内存区域,并返回该区域的起始地址。当无法预先确定内存的具体位置时,可以通过 malloc 动态分配内存。 ... [详细]
  • 本文详细解析了如何利用Appium与Python在真实设备上执行测试示例的方法。首先,需要开启手机的USB调试功能;其次,通过数据线将手机连接至计算机并授权USB调试权限。最后,在命令行工具中验证设备连接状态,确保一切准备就绪,以便顺利进行测试。 ... [详细]
  • 本文介绍了一个基于C++标准库实现的INI文件读写操作类。该类在现有网络资源的基础上进行了扩展和优化,增加了获取当前可执行文件路径和宽字节与多字节字符串转换的功能。通过这些增强功能,该类能够更好地适应各种应用场景,提高代码的可移植性和健壮性。具体实现细节请参见 `IniFileSTL.h` 文件。 ... [详细]
  • 安卓和ios是什么意思安卓和iOS是移动设备上的两款操作系统。安卓英文名为Android,是美国谷歌公司基于Linux内核开发的操作系统。iOS原名iPhoneOS,是由美国苹果公 ... [详细]
author-avatar
神秘布拉阁俱乐部
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有