C# Socket

摘要:
-------------------------------------------------------------------------------------------------------------------------------------------使用系统;使用System.Text;使用System.Net.Sockets;使用系统

-------------------------------------------------------------------------------------------------------------------------------------------

using System;
using System.Text;
using System.Net.Sockets;
using System.Net;
using System.Threading;

/// <summary>
/// 服务端
/// </summary>

namespace SocketServerTest
{
  class Program
  {
    private static byte[] result = new byte[1024];
    private static int myProt = 5209; //端口
    static Socket serverSocket;
    static void Main(string[] args)
    {
      //服务器IP地址
      IPAddress ip = IPAddress.Parse("127.0.0.1");
      serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
      //serverSocket.Bind(new IPEndPoint(ip, myProt)); //绑定IP地址:端口 

      serverSocket.Bind(new IPEndPoint(IPAddress.Any, myProt)); //绑定IP地址:端口  (正常情况下,客户端和服务端不在一台机器上,所以使用IPAddress.Any就表示任何客户端都可以连接到该服务端)
      serverSocket.Listen(10); //设定最多10个排队连接请求
      Console.WriteLine("启动监听{0}成功", serverSocket.LocalEndPoint.ToString());
      Socket clientSocket = serverSocket.Accept();
      while (true) {
          Thread.Sleep(1000);
          SendMsg(clientSocket);
      }
    }

    /// <summary>
    /// 以每秒一次的频率发送数据给客户端
    /// </summary>
    /// <param name="clientSocket"></param>
    public static void SendMsg(Socket clientSocket)
    {
      try
      {
        clientSocket.Send(Encoding.ASCII.GetBytes(GetRandomData()));
      }
      catch {
        Console.WriteLine("服务器异常");
        return;
      }
    }

    /// <summary>
    /// 接收消息
    /// </summary>
    /// <param name="clientSocket"></param>
    private static void ReceiveMessage(object clientSocket)
    {
      Socket myClientSocket = (Socket)clientSocket;
      while (true)
      {
        try
        {
          //通过clientSocket接收数据
          int receiveNumber = myClientSocket.Receive(result);
          Console.WriteLine("接收客户端{0}消息{1}", myClientSocket.RemoteEndPoint.ToString(), Encoding.ASCII.GetString(result, 0, receiveNumber));
        }
        catch (Exception ex)
        {
          Console.WriteLine(ex.Message);
          myClientSocket.Shutdown(SocketShutdown.Both);
          myClientSocket.Close();
          break;
        }
      }
    }

    /// <summary>
    /// 产生随机字符串
    /// </summary>
    /// <returns></returns>
    private static string GetRandomData()
    {
        Random ran = new Random();
        int x = ran.Next(50,200);
        int y = ran.Next(20,100);
        int z = 1000;
        int ID = ran.Next(1,30);
        string str = "ID:"+ID+"-x:"+x+"-y:"+y+"-z:"+z;
        return str;
    }

  }
}

---------------------------------------------------------------------------------------------------------

客户端

---------------------------------------------------------------------------------------------------------

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Net.Sockets;
using System.Threading;
/// <summary>
/// 客户端
/// </summary>
namespace SocketTest1
{
  class Program
  {
    private static byte[] result = new byte[1024];
    static void Main(string[] args)
    {
      //设定服务器IP地址
      IPAddress ip = IPAddress.Parse("127.0.0.1");
      Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
      try
      {
        clientSocket.Connect(new IPEndPoint(ip, 5209)); //配置服务器IP与端口
        Console.WriteLine("连接服务器成功");
      }
      catch
      {
        Console.WriteLine("连接服务器失败,请按回车键退出!");
        return;
      }
      //通过clientSocket接收数据
      while (true) {
            int receiveLength = clientSocket.Receive(result);
            Console.WriteLine("接收服务器消息:{0}", Encoding.ASCII.GetString(result, 0, receiveLength));
      }

      //通过 clientSocket 发送数据
      //for (int i = 0;i <10; i++)
      //{
      //  try
      //  {
      //    Thread.Sleep(1000);
      //    string sendMessage = "client send Message Hellp" + DateTime.Now;
      //    clientSocket.Send(Encoding.ASCII.GetBytes(sendMessage));
      //    Console.WriteLine("向服务器发送消息:{0}" + sendMessage);
      //  }
      //  catch
      //  {
      //    clientSocket.Shutdown(SocketShutdown.Both);
      //    clientSocket.Close();
      //    break;
      //  }
      //}

      //Console.WriteLine("发送完毕,按回车键退出");
      //Console.ReadLine();
    }
  }
}

免责声明:文章转载自《C# Socket》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Mac系统中桌面图片和用户头像图片的路径关于tomcat无法启动问题详解下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

docker.service启动失败:Unit not found的原因及解决办法

原因1:docker.socket 最初在启动docker时遇到问题,是因为docker.socket引起的,虽然记不清问题是表现为Unit not found还是执行systemctl start docker.service命令时hang住了,但是也一并记录在这里。 问题描述 我是从Docker 1.10.3升级到1.13.1版本,通过rpm包安装的。...

利用epoll实现异步IO

  之前异步IO一直没搞明白,大致的理解就是在一个大的循环中,有两部分:第一部分是监听事件;第二部分是处理事件(通过添加回调函数的方式)。就拿网络通信来说,可以先通过调用 select 模块中的 select 监听各个 socket 。当 socket 有事件到来时,针对相应的事件做出处理,就这么一直循环下去。所以异步IO也被称为事件驱动IO。原理其实我说...

linux网络编程--UNIX域套接字

UNIX域套接字   socket同样可以用于本地通信   创建套接字时使用本地协议PF_UNIX(或PF_LOCAL)PF_LOCAL   分为流式套接字和用户数据报套接字   和其他进程间通信方式相比使用方便。效率更高   用于前后台进程通信 本地地址结构:  struct sockaddr_un {   sa_family_t sun_family;...

boost asio 学习(七) 网络基础 连接器和接收器(TCP示例)

http://www.gamedev.net/blog/950/entry-2249317-a-guide-to-getting- started-with-boostasio?pg=8 7. Networking basics: connectors and acceptors (TCP)我们来学习boost的TCP网络编程。之前的篇章已经介绍了网络系统...

Socket聊天逻辑

         1、A发送消息到服务器          2、服务器接收到消息后会给所有用户发送这条消息          3、如果有用户断开连接,则不用给此用户发送 一、创建持久性连接服务器  net,设置其端口号为9000 const net = require(“net”); const server = net.creatServer(); se...

Linux Socket学习(十二)

套接口选项在前面的几章中,我们讨论了使用套接口的基础内容。现在我们要来探讨一些可用的其他的特征。在我们掌握了这一章的概念之后,我们就为后面的套接口的高级主题做好了准备。在这一章,我们将会专注于下列主题:如何使用getsockopt(2)函数获得套接口选项值如何使用setsockopt(2)函数设置套接口选项值如何使用这些常用的套接口选项得到套接口选项有时,...