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就可以通信了。

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

(0)

相关推荐

  • C#使用Socket发送和接收TCP数据实例

    本文实例讲述了Asp.net中C#使用Socket发送和接收TCP数据的方法,分享给大家供大家参考.具体实现方法如下: 具体程序代码如下: 复制代码 代码如下: using System; using System.Collections.Generic; using System.Net; using System.Net.Sockets; using System.Text; namespace ConsoleApplication1 {     public static class So

  • c#(Socket)同步套接字代码示例

    同步客户端套接字示例 下面的示例程序创建一个连接到服务器的客户端.该客户端是用同步套接字生成的,因此挂起客户端应用程序的执行,直到服务器返回响应为止.该应用程序将字符串发送到服务器,然后在控制台显示该服务器返回的字符串. C# using System; using System.Net; using System.Net.Sockets; using System.Text; public class SynchronousSocketClient { public static void S

  • C#中Socket与Unity相结合示例代码

    前言 初步接触了Socket,现使其与Unity相结合,做成一个简单的客户端之间可以互相发送消息的一个Test.下面话不多说了,来一起看看详细的介绍吧. 方法如下: 首先,是服务端的代码. 创建一个连接池,用于存储客户端的数量. using System; using System.Net; using System.Net.Sockets; using System.Collections; using System.Collections.Generic; namespace Server

  • C#使用Protocol Buffer(ProtoBuf)进行Unity中的Socket通信

    首先来说一下本文中例子所要实现的功能: 基于ProtoBuf序列化对象 使用Socket实现时时通信 数据包的编码和解码 下面来看具体的步骤: 一.Unity中使用ProtoBuf 导入DLL到Unity中, 创建网络传输的模型类: using System; using ProtoBuf; //添加特性,表示可以被ProtoBuf工具序列化 [ProtoContract] public class NetModel { //添加特性,表示该字段可以被序列化,1可以理解为下标 [ProtoMem

  • C#在Unity游戏开发中进行多线程编程的方法

    在这之前,有很多人在质疑Unity支不支持多线程,事实上Unity是支持多线程的.而提到多线程就要提到Unity非常常用的协程,然而协程并非真正的多线程.协程其实是等某个操作完成之后再执行后面的代码,或者说是控制代码在特定的时机执行.而多线程在Unity渲染和复杂逻辑运算时可以高效的使用多核CPU,帮助程序可以更高效的运行.本篇主要介绍在Unity中如何使用多线程. 首先引入C#中使用多线程的类库 using System.Threading; 创建线程实例的四种方式 一.线程执行无参方法 构造

  • C# Socket网络编程实例

    本文实例讲述了C# Socket网络编程技巧.分享给大家供大家参考.具体分析如下: 客户端要连接服务器:首先要知道服务器的IP地址.而服务器里有很多的应用程序,每一个应用程序对应一个端口号 所以客户端想要与服务器中的某个应用程序进行通信就必须要知道那个应用程序的所在服务器的IP地址,及应用程序所对应的端口号 TCP协议:安全稳定,一般不会发生数据丢失,但是效率低.利用TCP发生数据一般经过3次握手(所有效率低,自己百度三次握手) UDP协议:快速,效率高,但是不稳定,容易发生数据丢失(没有经过三

  • C#实现的Socket服务器端、客户端代码分享

    服务端: using System; using System.Collections.Generic; using System.Net; using System.Net.Sockets; using System.Text; namespace Server { class Program { static void Main(string[] args) { Socket server = new Socket(AddressFamily.InterNetwork, SocketType

  • C#之Socket操作类实例解析

    本文展示了一个C#的Socket操作类的完整实例,并附带了用法说明,分享给大家供大家参考之用.具体方法如下: 主要功能代码如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net.Sockets; using System.Collections; using System.Net; using System.Runtime.Serializ

  • c#(Socket)异步套接字代码示例

    异步客户端套接字示例 下面的示例程序创建一个连接到服务器的客户端.该客户端是用异步套接字生成的,因此在等待服务器返回响应时不挂起客户端应用程序的执行.该应用程序将字符串发送到服务器,然后在控制台显示该服务器返回的字符串. C# using System; using System.Net; using System.Net.Sockets; using System.Threading; using System.Text; // State object for receiving data 

  • C#中Socket通信用法实例详解

    本文实例讲述了C#中Socket通信用法.分享给大家供大家参考.具体如下: 一.UDP方式: 服务器端代码: static void Main(string[] args) { int recv; byte[] data = new byte[1024]; IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 9050);//定义一网络端点 Socket newsock = new Socket(AddressFamily.InterNetwork, S

随机推荐