C#实现Socket通信的解决方法

 更新时间:2014年07月16日 16:11:08   投稿:shichen2014  
这篇文章主要介绍了C#实现Socket通信的解决方法,需要的朋友可以参考下

本文以实例详述了C#实现Socket通信的解决方法,具体实现步骤如下:

1、首先打开VS新建两个控制台应用程序:
ConsoleApplication_socketServer和ConsoleApplication_socketClient。
 
2、在ConsoleApplication_socketClient中输入以下代码:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Net; 
using System.Net.Sockets; 
 
namespace ConsoleApplication_socketClient 
{ 
  class Program 
  { 
    static Socket clientSocket; 
    static void Main(string[] args) 
    { 
      //将网络端点表示为IP地址和端口 用于socket侦听时绑定  
      IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("*.*.*.*"), 3001); //填写自己电脑的IP或者其他电脑的IP,如果是其他电脑IP的话需将ConsoleApplication_socketServer工程放在对应的电脑上。 
      clientSocket = new Socket(ipep.AddressFamily,SocketType.Stream,ProtocolType.Tcp);  
      //将Socket连接到服务器  
      try 
      { 
        clientSocket.Connect(ipep); 
        String outBufferStr; 
        Byte[] outBuffer = new Byte[1024]; 
        Byte[] inBuffer = new Byte[1024]; 
        while (true) 
        { 
          //发送消息  
          outBufferStr = Console.ReadLine(); 
          outBuffer = Encoding.ASCII.GetBytes(outBufferStr); 
          clientSocket.Send(outBuffer, outBuffer.Length, SocketFlags.None); 
           
          //接收服务器端信息        
          clientSocket.Receive(inBuffer, 1024, SocketFlags.None);//如果接收的消息为空 阻塞 当前循环 
          Console.WriteLine("服务器说:"); 
          Console.WriteLine(Encoding.ASCII.GetString(inBuffer)); 
        } 
      } 
      catch 
      { 
        Console.WriteLine("服务未开启!"); 
        Console.ReadLine(); 
      } 
    } 
  } 
} 

3、在ConsoleApplication_socketServer中输入以下代码:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.IO; 
using System.Net; 
using System.Net.Sockets; 
using System.Threading; 
 
namespace ConsoleApplication_socketServer 
{ 
  class Program 
  { 
    static Socket serverSocket; 
    static Socket clientSocket; 
    static Thread thread; 
    static void Main(string[] args) 
    { 
      IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 3001); 
      serverSocket = new Socket(ipep.AddressFamily, SocketType.Stream, ProtocolType.Tcp); 
      serverSocket.Bind(ipep); 
      serverSocket.Listen(10); 
      while (true) 
      { 
        clientSocket = serverSocket.Accept(); 
        thread = new Thread(new ThreadStart(doWork)); 
        thread.Start(); 
      } 
    } 
    private static void doWork() 
    { 
      Socket s = clientSocket;//客户端信息 
      IPEndPoint ipEndPoint = (IPEndPoint)s.RemoteEndPoint; 
      String address = ipEndPoint.Address.ToString(); 
      String port = ipEndPoint.Port.ToString(); 
      Console.WriteLine(address + ":" + port + " 连接过来了"); 
      Byte[] inBuffer = new Byte[1024]; 
      Byte[] outBuffer = new Byte[1024]; 
      String inBufferStr; 
      String outBufferStr; 
      try 
      { 
        while (true) 
        { 
          s.Receive(inBuffer, 1024, SocketFlags.None);//如果接收的消息为空 阻塞 当前循环 
          inBufferStr = Encoding.ASCII.GetString(inBuffer); 
          Console.WriteLine(address + ":" + port + "说:"); 
          Console.WriteLine(inBufferStr); 
          outBufferStr = Console.ReadLine(); 
          outBuffer = Encoding.ASCII.GetBytes(outBufferStr); 
          s.Send(outBuffer, outBuffer.Length, SocketFlags.None); 
        } 
      } 
      catch 
      { 
        Console.WriteLine("客户端已关闭!"); 
      } 
    } 
  } 
} 
 

4、先运行ConsoleApplication_socketServer,后运行ConsoleApplication_socketClient就可以通信了。

本例给出了基本的实现代码,读者可以根据自身的需求进一步完成个性化功能。

相关文章

  • C#连接数据库的几种方法

    C#连接数据库的几种方法

    这篇文章介绍了C#连接数据库的几种方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04
  • C# memcache 使用介绍

    C# memcache 使用介绍

    这篇文章主要介绍了C# memcache 使用介绍,需要的朋友可以参考下
    2015-05-05
  • c# 用Dictionary实现日志数据批量插入

    c# 用Dictionary实现日志数据批量插入

    这篇文章主要介绍了c# 用Dictionary实现日志数据批量插入的步骤,帮助大家更好的理解和使用c#中的Dictionary类,感兴趣的朋友可以了解下
    2021-02-02
  • C# Unity使用正则表达式去除部分富文本的代码示例

    C# Unity使用正则表达式去除部分富文本的代码示例

    正则表达式在我们日常开发中的用处不用多说了吧,下面这篇文章主要给大家介绍了关于C# Unity使用正则表达式去除部分富文本的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-03-03
  • C#使用iCSharpcode进行文件压缩实现方法

    C#使用iCSharpcode进行文件压缩实现方法

    这篇文章主要介绍了C#使用iCSharpcode进行文件压缩实现方法,末尾附有完整实例,有助于大家参考借鉴,需要的朋友可以参考下
    2014-08-08
  • C#找出字符串中第一个字母并大写的方法

    C#找出字符串中第一个字母并大写的方法

    这篇文章主要介绍了C#找出字符串中第一个字母并大写的方法,通过C#面向对象的方式定义了类的成员函数实现字符串转换的功能,需要的朋友可以参考下
    2016-02-02
  • C#中的 == 和equals()区别浅析

    C#中的 == 和equals()区别浅析

    这篇文章主要介绍了C#中的 == 和equals()的区别,对不同点进行了阐述,感兴趣的小伙伴们可以参考一下
    2015-11-11
  • C#实现IDbConnection/IDbCommand等相关通用数据接口

    C#实现IDbConnection/IDbCommand等相关通用数据接口

    ADO.NET 中的数据提供者对象提供了IDbConnection、IDbCommand、IDbDataParameter等通用数据接口,本文将利用这些对象实现一个通用方法以访问和操作数据库内容,需要的朋友可以参考下
    2024-04-04
  • C#检测是否有u盘插入的方法

    C#检测是否有u盘插入的方法

    这篇文章主要介绍了C#检测是否有u盘插入的方法,涉及C#操作硬件的相关技巧,需要的朋友可以参考下
    2015-04-04
  • 在Winform和WPF中注册全局快捷键实现思路及代码

    在Winform和WPF中注册全局快捷键实现思路及代码

    如果注册快捷键,RegisterHotKey中的fsModifiers参数为0,即None选项,一些安全软件会警报,可能因为这样就可以全局监听键盘而造成安全问题,感兴趣的你可以参考下本文
    2013-02-02

最新评论