zoukankan      html  css  js  c++  java
  • 最基本的Socket编程(服务端跟客户端通信) C#版

    效果图:

    说明:此示例在.net2005\xp下运行通过

    示例程序是同步套接字程序,功能很简单,只是客户端发给服务器一条信息,服务器向客户端返回一条信息;这里只是一个简单的示例,是一个最基本的socket编程流程,在接下来的文章中,会依次记录套接字的同步和异步,以及它们的区别。

    下面是示例程序的简单步骤说明

    服务器端:

    第一步:用指定的端口号和服务器的ip建立一个EndPoint对像;

    第二步:建立一个Socket对像;

    第三步:用socket对像的Bind()方法绑定EndPoint

    第四步:用socket对像的Listen()方法开始监听;

    第五步:接受到客户端的连接,用socket对像的Accept()方法创建新的socket对像用于和请求的客户端进行通信;

    第六步:通信结束后一定记得关闭socket;

    服务器端
     1 using System;
     2 using System.Collections.Generic;
     3 using System.Text;
     4 using System.Net;
     5 using System.Net.Sockets;
     6 namespace ConsoleApplication2
     7 {
     8     //服务器端
     9     class Program
    10     {
    11    
    12         static void Main(string[] args)
    13         {
    14             int port = 2000;
    15             string host = "127.0.0.1";
    16 
    17             ///创建终结点(EndPoint)
    18             IPAddress ip = IPAddress.Parse(host);//把ip地址字符串转换为IPAddress类型的实例
    19             IPEndPoint ipe = new IPEndPoint(ip, port);//用指定的端口和ip初始化IPEndPoint类的新实例
    20 
    21 
    22             ///创建socket并开始监听
    23             Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建一个socket对像,如果用udp协议,则要用SocketType.Dgram类型的套接字
    24             s.Bind(ipe);//绑定EndPoint对像(2000端口和ip地址)
    25             s.Listen(0);//开始监听
    26             Console.WriteLine("等待客户端连接");
    27 
    28 
    29             ///接受到client连接,为此连接建立新的socket,并接受信息
    30             Socket temp = s.Accept();//为新建连接创建新的socket
    31             Console.WriteLine("建立连接");
    32             string recvStr = "";
    33             byte[] recvBytes = new byte[1024];
    34             int bytes;
    35             bytes = temp.Receive(recvBytes, recvBytes.Length, 0);//从客户端接受信息
    36             recvStr += Encoding.UTF8.GetString(recvBytes, 0, bytes);
    37 
    38 
    39             ///给client端返回信息
    40             Console.WriteLine("客户端传来的信息:{0}", recvStr);//把客户端传来的信息显示出来
    41             string sendStr = "客户端传递信息成功";
    42             byte[] bs = Encoding.UTF8.GetBytes(sendStr);
    43             temp.Send(bs, bs.Length, 0);//返回信息给客户端
    44             temp.Close();
    45             s.Close();
    46             Console.ReadLine();
    47         }
    48 
    49 
    50     }
    51 }
    52 

    客户端:

    第一步:用指定的端口号和服务器的ip建立一个EndPoint对像;

    第二步:建立一个Socket对像;

    第三步:用socket对像的Connect()方法以上面建立的EndPoint对像做为参数,向服务器发出连接请求;

    第四步:如果连接成功,就用socket对像的Send()方法向服务器发送信息;

    第五步:用socket对像的Receive()方法接受服务器发来的信息 ;

    第六步:通信结束后一定记得关闭socket

     

    客户端代码
     1 using System;
     2 using System.Collections.Generic;
     3 using System.Text;
     4 using System.Net;
     5 using System.Net.Sockets;
     6 namespace ConsoleApplication3
     7 {
     8     //客户端
     9     class Program
    10     {
    11         static void Main(string[] args)
    12         {
    13             try
    14             {
    15                 int port = 2000;
    16                 string host = "127.0.0.1";
    17 
    18                 ///创建终结点EndPoint
    19                 IPAddress ip = IPAddress.Parse(host);           
    20                 IPEndPoint ipe = new IPEndPoint(ip, port);//把ip和端口转化为IPEndpoint实例
    21 
    22 
    23                 ///创建socket并连接到服务器
    24                 Socket c = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建Socket
    25                 Console.WriteLine("正在连接…");
    26                 c.Connect(ipe);//连接到服务器
    27 
    28                 ///向服务器发送信息
    29                 string sendStr = "你好, 我是客户端的信息";
    30                 byte[] bs = Encoding.UTF8.GetBytes(sendStr);//把字符串编码为字节
    31                 Console.WriteLine("发送信息");
    32                 c.Send(bs, bs.Length, 0);//发送信息
    33 
    34 
    35                 ///接受从服务器返回的信息
    36                 string recvStr = "";
    37                 byte[] recvBytes = new byte[1024];
    38                 int bytes;
    39                 bytes = c.Receive(recvBytes, recvBytes.Length, 0);//从服务器端接受返回信息
    40                 recvStr += Encoding.UTF8.GetString(recvBytes, 0, bytes);
    41                 Console.WriteLine("你好,我是服务器,已经接受客户端传来的信息:{0}", recvStr);//显示服务器返回信息
    42 
    43                 ///一定记着用完socket后要关闭
    44                 c.Close();
    45             }
    46 
    47             catch (ArgumentNullException e)
    48             {
    49                 Console.WriteLine("argumentNullException: {0}", e);
    50             }
    51             catch (SocketException e)
    52             {
    53                 Console.WriteLine("SocketException:{0}", e);
    54             }
    55 
    56             Console.WriteLine("Press Enter to Exit");
    57             Console.ReadLine();
    58         }
    59     }
    60 }
    61 

     

     

  • 相关阅读:
    Mvc4.0添加商品到Cookie
    个人作业——词频统计
    利用飞信虚拟框架开发绿色.NET程序
    专用服务器和共享服务器的区别(转)
    我做项目对Excel进程处理问题
    通过SQL Server 2000的链接服务器访问Sybase数据库
    结合地理信息系统开发的项目
    模仿Smartphone的开始菜单效果
    如何修改Windows Mobile手机系统颜色
    个人负责的第一个地图应用项目框架截图
  • 原文地址:https://www.cnblogs.com/wujy/p/2279606.html
Copyright © 2011-2022 走看看