c# 使用TcpClient TcpListener类 服务器和客户端实现双向连接 web service web socket

在这里插入图片描述

通过web service获取服务器ip地址 端口先写5000

using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Web;
using System.Web.Services;

namespace WebApplication1
{
    /// <summary>
    /// WebService1 的摘要说明
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。 
    // [System.Web.Script.Services.ScriptService]
    public class WebService1 : System.Web.Services.WebService
    {
         [WebMethod(Description = "获取服务器ip地址 端口")]
        public string GetIP()
        {
            string AddressIP = string.Empty;
            //Dns.GetHostEntry(Dns.GetHostName()).AddressList
            foreach (IPAddress _IPAddress in Dns.GetHostAddresses(Dns.GetHostName()))
            {
                if (_IPAddress.AddressFamily.ToString() == "InterNetwork")
                {
                    AddressIP = _IPAddress.ToString();
                }
            }
            return JsonConvert.SerializeObject(new { state = true, IP = AddressIP,Port="5000" });
        }
    }
}

服务器

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Net;
using System.Threading;
using System.IO;

namespace TCPServer
{
    public partial class TCPServer : Form
    {
        public TCPServer()
        {
            InitializeComponent();
        }

        //tcp监听
        private TcpListener listener;
        private TcpClient client;
        public BinaryReader br;
        public BinaryWriter bw;
        private void button1_Click(object sender, EventArgs e)
        {
            //获取本地ip并设置
            GetIP();
            textBox4.Text = "5000";
            Thread t = new Thread(server);
            t.IsBackground = true;
            t.Start(listener);

        }

        private void server(object o)
        {
            
            //服务端监听来自端口号5000 ip地址任意的信息   负责接收客户端连接请求(但不负责与客户端通信)的socket
            //listener = new TcpListener(IPAddress.Any, 5000);
            listener = new TcpListener(IPAddress.Parse(textBox3.Text), int.Parse(textBox4.Text));
            listener.Start();
            ShowMsg("服务器开始监听");
            client = listener.AcceptTcpClient();
            label.Text = "连接成功";
            ShowMsg(client.Client.RemoteEndPoint.ToString()+"连接成功");

            while (true)
            {
                try
                {
                    NetworkStream strem = client.GetStream();
                    br = new BinaryReader(strem);
                    string receive = null;
                    receive = br.ReadString();//读取
                    ShowMsg(client.Client.RemoteEndPoint.ToString() + ":" + receive);
                    
                }
                catch (Exception)
                {
                    MessageBox.Show("接收失败");
                }
                
            }


        }

        private void GetIP()
        {
            string ipc = "";
            string AddressIP = string.Empty;
            foreach (IPAddress _IPAddress in Dns.GetHostEntry(Dns.GetHostName()).AddressList)
            {
                //Console.WriteLine(_IPAddress);
                if (_IPAddress.AddressFamily.ToString() == "InterNetwork")
                {
                    AddressIP = _IPAddress.ToString();
                }

            }
            ipc = AddressIP;
            textBox3.Text = ipc;


        }


        private void button3_Click(object sender, EventArgs e)
        {
            //利用TcpClient对象GetStream方法得到网络流
            NetworkStream clientStream = client.GetStream();
            bw = new BinaryWriter(clientStream);
            //写入
            bw.Write(textBox2.Text);
            ShowMsg("发送:" + textBox2.Text);

        }

        private void ShowMsg(string v)
        {
            textBox1.AppendText(v + "\r\n");
        }


        private void TCPServer_Load(object sender, EventArgs e)
        {
            Control.CheckForIllegalCrossThreadCalls = false;
        }
    }
}

客户端

using Newtonsoft.Json;
using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Windows.Forms;
namespace TCPServer
{
    public partial class TcpClient : Form
    {
        public TcpClient()
        {
            InitializeComponent();
        }

        
        private System.Net.Sockets.TcpClient client;
        public BinaryReader br;
        public BinaryWriter bw;
        //private string str;
        //连接
        private void button1_Click(object sender, EventArgs e)
        {
            Thread t = new Thread(clientA);
            t.IsBackground = true;
            t.Start();

        }


        private void button2_Click(object sender, EventArgs e)
        {
            WebReference.WebService1 ws = new WebReference.WebService1();
            var str = JsonConvert.DeserializeAnonymousType(ws.GetIP(),new { ip=string.Empty ,port= string.Empty });
            textBox3.Text = str.ip;
            textBox4.Text = str.port;

        }
        private void clientA()  
        {
            //通过服务器的ip和端口号,创建TcpClient实例
            client = new System.Net.Sockets.TcpClient();
            //使用指定的IP地址和端口号将客户端连接到TCP主机
            client.Connect(IPAddress.Parse(textBox3.Text), int.Parse(textBox4.Text));
            label.Text = "与服务器连接成功";
            ShowMsg("服务器:"+ client.Client.RemoteEndPoint.ToString());
            ShowMsg("客户端:" + client.Client.LocalEndPoint.ToString());
            while (true)
            {
                try
                {
                    NetworkStream clientStream = client.GetStream();
                    br = new BinaryReader(clientStream);
                    string receive = null;
                    receive = br.ReadString();
                    ShowMsg(client.Client.RemoteEndPoint.ToString() +":"+ receive);
                }
                catch
                {
                    MessageBox.Show("接收失败!");
                }
            }


        }

        
        private void button3_Click(object sender, EventArgs e)
        {

            NetworkStream clientStream = client.GetStream();
            bw = new BinaryWriter(clientStream);
            bw.Write(textBox2.Text);
            ShowMsg("发送:"+textBox2.Text);


        }
        
        private void ShowMsg(string v)
        {
            textBox1.AppendText(v + "\r\n");
        }
        private void TcpClient_Load(object sender, EventArgs e)
        {
            Control.CheckForIllegalCrossThreadCalls = false;
        }

       
    }
}

示例:

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是使用 C#TCPClient 写一个简单的服务器客户端进行通讯的示例: 服务器端代码: ```csharp using System; using System.Net; using System.Net.Sockets; using System.Text; class Program { static void Main() { // 创建一个监听的 Socket 对象 TcpListener listener = new TcpListener(IPAddress.Any, 8888); listener.Start(); Console.WriteLine("服务器已启动,等待客户端连接..."); // 等待客户端连接 TcpClient client = listener.AcceptTcpClient(); Console.WriteLine("客户端连接!"); // 获取客户端的网络流对象 NetworkStream stream = client.GetStream(); // 接收客户端发送的消息 byte[] buffer = new byte[1024]; int bytesRead = stream.Read(buffer, 0, buffer.Length); string message = Encoding.ASCII.GetString(buffer, 0, bytesRead); Console.WriteLine("收到客户端消息: " + message); // 回复客户端 string response = "Hello, client!"; byte[] responseBytes = Encoding.ASCII.GetBytes(response); stream.Write(responseBytes, 0, responseBytes.Length); Console.WriteLine("已回复客户端消息"); // 关闭连接 client.Close(); listener.Stop(); } } ``` 客户端代码: ```csharp using System; using System.Net.Sockets; using System.Text; class Program { static void Main() { // 创建一个 TCPClient 对象,并连接服务器 TcpClient client = new TcpClient(); client.Connect("服务器地址", 8888); // 获取网络流对象 NetworkStream stream = client.GetStream(); // 发送消息给服务器 string message = "Hello, server!"; byte[] messageBytes = Encoding.ASCII.GetBytes(message); stream.Write(messageBytes, 0, messageBytes.Length); Console.WriteLine("已发送消息给服务器"); // 接收服务器的响应 byte[] buffer = new byte[1024]; int bytesRead = stream.Read(buffer, 0, buffer.Length); string response = Encoding.ASCII.GetString(buffer, 0, bytesRead); Console.WriteLine("收到服务器响应: " + response); // 关闭连接 client.Close(); } } ``` 在上面的代码中,服务器端通过创建一个 TcpListener 对象监听指定的 IP 地址和端口号,然后等待客户端连接。一旦有客户端连接成功,就获取客户端的网络流对象,接收客户端发送的消息,并回复消息给客户端。最后关闭连接客户端通过创建一个 TcpClient 对象,并连接服务器的 IP 地址和端口号。然后获取网络流对象,发送消息给服务器,并接收服务器的响应。最后关闭连接。 需要注意的是,这只是一个简单的示例,实际应用中可能需要更多的错误处理和异常处理。另外,具体使用方式可能因不同的场景和需求而有所不同,这里只是简单展示了一个基本的 TCPClient使用示例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值