软件编程
位置:首页>> 软件编程>> C#编程>> C#实现Socket通信的解决方法

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

作者:shichen2014  发布时间:2022-06-01 22:06:00 

标签: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
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com