c#-网络-Socket-简单实验

该博客展示了如何使用C#实现一个简单的TCP套接字通信,包括服务端监听和接收连接,以及客户端发起连接并发送接收数据。服务端通过`Socket.Accept()`接收客户端请求,读取直到接收到'FINAL'标志,然后发送确认消息。客户端则连接到指定IP和端口,发送数据并接收服务端响应。

1.概要

1.1 服务端

 Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
 socket.Bind(new IPEndPoint(IPAddress.Any, 2112));
 socket.Listen(10);

 Socket socket1 = socket.Accept();

 int num = socket1.Receive(receivedBytes);

 socket1.Send(replyMessage);

1.2 客户端

 Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            socket.Connect(iPEndPoint);

 socket.Send(forwardMessage);

 int num = socket.Receive(receivedBytes);

2 代码

2.1 代码-服务端

using System;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Text;

namespace ConsoleApp9
{
    class Program
    {
        delegate void updateDisplayDelegae(String text);
        static void Main(string[] args)
        {
            Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            socket.Bind(new IPEndPoint(IPAddress.Any, 2112));
            socket.Listen(10);
            while (true) {
                Console.WriteLine("");
                Socket socket1 = socket.Accept();
                String receivedValue = string.Empty;
                while (true) {
                    Byte[] receivedBytes = new Byte[1024];
                    int num = socket1.Receive(receivedBytes);
                    Console.WriteLine("receiveing .");
                    receivedValue += Encoding.ASCII.GetString(receivedBytes, 0, num);
                    if (receivedValue.IndexOf("FINAL") > -1) {
                        break;
                    }

                }
                Console.WriteLine("receivedValue:{0}", receivedValue);
                string replyValue = "message successfully received.";
                byte[] replyMessage = Encoding.ASCII.GetBytes(replyValue);
                socket1.Send(replyMessage);
                socket1.Shutdown(SocketShutdown.Both); 
            }
            socket.Close();
            Console.ReadKey();
        }
        
    }
}

2.2 代码-客户端

using System;
using System.Net.Sockets;
using System.IO;
using System.Net;
using System.Text;

namespace ConsoleApp10
{
    class Program
    {
        static void Main(string[] args)
        {
            byte[] receivedBytes = new byte[1024];
            IPHostEntry iPHostEntry = Dns.Resolve("127.0.0.1");
            IPAddress iPAddress = iPHostEntry.AddressList[0];
            IPEndPoint iPEndPoint = new IPEndPoint(iPAddress, 2112);
            Console.WriteLine("Starting: ceating socket object");

            Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            socket.Connect(iPEndPoint);
            Console.WriteLine("");

            string sendingMessage = "hello word service";
            byte[] forwardMessage = Encoding.ASCII.GetBytes(sendingMessage+ "[FINAL]");
            socket.Send(forwardMessage);

            int num = socket.Receive(receivedBytes);
            Console.WriteLine("收到的数据:{0}",Encoding.ASCII.GetString(receivedBytes,0,num));
            socket.Shutdown(SocketShutdown.Both);
            socket.Close();

            Console.ReadKey();
        }
    }
}

 

3.运行结果 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值