• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > 详解C# Socket简单例子(服务器与客户端通信)

详解C# Socket简单例子(服务器与客户端通信)

作者:Andrew_wx 字体:[增加 减小] 来源:互联网 时间:2017-05-28

Andrew_wx 通过本文主要向大家介绍了c语言32关键字详解,c语言链表详解,c语言指针详解,c语言题库及详解答案,c语言关键字详解等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

这个例子只是简单实现了如何使用 Socket 类实现面向连接的通信。

注意:此例子的目的只是为了说明用套接字写程序的大概思路,而不是实际项目中的使用程序。在这个例子中,实际上还有很多问题没有解决,如消息边界问题、端口号是否被占用、消息命令的解析问题等。。

下面是两个程序的代码,(两个程序均为控制台程序)

先发服务端的(Server)完整代码如下:

引入命名空间:

using System.Net.Sockets; 
using SystemNet; 
using SystemThreading; 
</div>

完整代码如下:

namespace SocketServer 
{ 
  class Program 
  { 
    private static byte[] result = new byte[1024]; 
    private static int myProt = 8885;  //端口 
    static Socket serverSocket; 
    static void Main(string[] args) 
    { 
      //服务器IP地址 
      IPAddress ip = IPAddressParse("1"); 
      serverSocket = new Socket(AddressFamilyInterNetwork, SocketTypeStream, ProtocolTypeTcp); 
      serverSocketBind(new IPEndPoint(ip, myProt)); //绑定IP地址:端口 
      serverSocketListen(10);  //设定最多10个排队连接请求 
      ConsoleWriteLine("启动监听{0}成功", serverSocketLocalEndPointToString()); 
      //通过Clientsoket发送数据 
      Thread myThread = new Thread(ListenClientConnect); 
      myThreadStart(); 
      ConsoleReadLine(); 
    } 
 
    /// <summary> 
    /// 监听客户端连接 
    /// </summary> 
    private static void ListenClientConnect() 
    { 
      while (true) 
      { 
        Socket clientSocket = serverSocketAccept(); 
        clientSocketSend(EncodingASCIIGetBytes("Server Say Hello")); 
        Thread receiveThread = new Thread(ReceiveMessage); 
        receiveThreadStart(clientSocket); 
      } 
    } 
 
    /// <summary> 
    /// 接收消息 
    /// </summary> 
    /// <param name="clientSocket"></param> 
    private static void ReceiveMessage(object clientSocket) 
    { 
      Socket myClientSocket = (Socket)clientSocket; 
      while (true) 
      { 
        try 
        { 
          //通过clientSocket接收数据 
          int receiveNumber = myClientSocketReceive(result); 
          ConsoleWriteLine("接收客户端{0}消息{1}", myClientSocketRemoteEndPointToString(), EncodingASCIIGetString(result, 0, receiveNumber)); 
        } 
        catch(Exception ex) 
        { 
          ConsoleWriteLine(exMessage); 
          myClientSocketShutdown(SocketShutdownBoth); 
          myClientSocketClose(); 
          break; 
        } 
      } 
    } 
  } 
} 
</div>

以上是服务端(server)的完整代码。

客户端(Client)的完整代码如下:

引入命名空间:

using SystemNet; 
using SystemNetSockets; 
using SystemThreading; 
</div>

完整代码:

namespace SocketClient 
{ 
  class Program 
  { 
    private static byte[] result = new byte[1024]; 
    static void Main(string[] args) 
    { 
      //设定服务器IP地址 
      IPAddress ip = IPAddressParse("1"); 
      Socket clientSocket = new Socket(AddressFamilyInterNetwork, SocketTypeStream, ProtocolTypeTcp); 
      try 
      { 
        clientSocketConnect(new IPEndPoint(ip, 8885)); //配置服务器IP与端口 
        ConsoleWriteLine("连接服务器成功"); 
      } 
      catch 
      { 
        ConsoleWriteLine("连接服务器失败,请按回车键退出!"); 
        return; 
      } 
      //通过clientSocket接收数据 
      int receiveLength = clientSocketReceive(result); 
      ConsoleWriteLine("接收服务器消息:{0}",EncodingASCIIGetString(result,0,receiveLength)); 
      //通过 clientSocket 发送数据 
      for (int i = 0; i < 10; i++) 
      { 
        try 
        { 
          ThreadSleep(1000);  //等待1秒钟 
          string sendMessage = "client send Message Hellp" + DateTimeNow; 
          clientSocketSend(EncodingASCIIGetBytes(sendMessage)); 
          ConsoleWriteLine("向服务器发送消息:{0}" + sendMessage); 
        } 
        catch 
        { 
          clientSocketShutdown(SocketShutdownBoth); 
          clientSocketClose(); 
          break; 
        } 
      } 
      ConsoleWriteLine("发送完毕,按回车键退出"); 
      ConsoleReadLine(); 
    } 
  } 
} 
</div>

编译成功后,先运行 服务端(server),再运行客户端(client)即可达到通信效果。

效果如下图:

该程序已在局域网测试通过。(192.168.X.X)

若编译失败,可到下面的地址下载项目文件:demo

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 详解C#中三个关键字params,Ref,out
  • 详解三种C#实现数组反转方式
  • 详解C# 利用反射根据类名创建类的实例对象
  • 详解C#用new和override来实现抽象类的重写区别
  • 详解C#把DataTable中数据一次插入数据库的方法
  • 详解c# 类的构造方法
  • 详解C#多线程之线程同步
  • 详解C#中 Thread,Task,Async/Await,IAsyncResult的那些事儿
  • 详解C#中的委托
  • 详解C#中的out和ref

相关文章

  • 2017-05-28C#通过正则表达式实现提取网页中的图片
  • 2017-05-28C#事件用法实例浅析
  • 2017-05-28c#检测usb设备拨插类库USBClassLibrary分享
  • 2017-05-28.NET中实现彩色光标、动画光标及自定义光标的方法
  • 2017-05-28C#读取计算机CPU及HDD信息的方法
  • 2017-05-28C#中的高阶函数介绍
  • 2017-05-28C#使用读写锁三行代码简单解决多线程并发的问题
  • 2017-05-28C#实现获取不同对象中名称相同属性的方法
  • 2017-05-28C# 实现的图片盖章功能,支持拖拽、旋转、放缩、保存
  • 2017-05-28简单学习C#中的泛型方法使用

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C#中委托和事件的区别实例解析
    • C#获取指定PDF文件页数的方法
    • c#数据库与TXT导入导出的实例
    • C#创建、读取和修改Excel的方法
    • C#实现统计字数功能的方法
    • 基于C#的socket编程的TCP异步的实现代码
    • 不使用qvod播放器获取qvod播放路径的方法
    • C#实现文件上传以及多文件上传功能
    • c#.NET中日志信息写入Windows日志中解决方案
    • C#获取远程XML文档的方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有