C# socket 服务端和客户端通信详细编写实例(服户端篇)

C# socket 服务端和客户端通信详细编写实例

socket 通信

希望对你有帮助。
具体得
基于TCP/IP的通信基本上都是利用SOCKET套接字进行数据通讯,程序一般分为服务器端和用户端两部分。设计思路(visual studio下):
第一部分 服务器端
  一、创建服务器套接字(socket)。
  二、服务器套接字进行信息绑定(bind),并开始监听连接(listen)。
  三、接受来自用户端的连接请求(accept)。
  四、开始数据传输(send/receive)。
  五、关闭套接字(closesocket)。

第二部分 客户端
  一、创建客户套接字(socket)。
  二、与远程服务器进行连接(connect),如被接受则创建接收进程。
  三、开始数据传输(send/receive)。
  四、关闭套接字(closesocket)
  
说明:本文全程使用C#编写

socket 通信服务端编写实例过程

1、创建windows窗体对象,加入以下控件在这里插入图片描述
2、编写程序

***********代码段1

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

namespace Server
{
   
    public partial class Form1 : Form
    {
   
        public Form1()
        {
   
            InitializeComponent();
            txtPort.Text = "50000";
        }

        private void button1_Click(object sender, EventArgs e)
        {
   
            Socket socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            IPAddress ip = IPAddress.Any;//IPAddress.Parse(txtPort.Text);
            //创建端口对象
            IPEndPoint point = new IPEndPoint(ip, Convert.ToInt32(txtPort.Text));
            //监听
            socketWatch.Bind(point);

            ShowMsg("监听成功");
            //某一时间点最大能监听的数,大于设置的数要排队
            socketWatch.Listen(10);
			//等待连接,连接成功返回一个用于数据收发得socket
            Socket socketSend = socketWatch.Accept();
            ShowMsg(socketSend.RemoteEndPoint.ToString() + ":" + " 连接成功" + "\r\n");
       }
       void ShowMsg(string str)
       {
   
            txtLog.AppendText(str + "\r\n");
       }

以上代码调试结果如下
在这里插入图片描述 结果输入端口号,点击开始监听,出现监听成功,但是出现一个问题,窗体此时无法移动,因为,代码一直停留在accept等待连接状态,下面我们开启系统自带的客户端,我在这篇文章中详细的介绍了如何开启系统自带的客户端(链接: link.),知道的自行跳过,此时出现下面图示结果,然后窗体也能自由移动了
在这里插入图片描述accept()函数等待客户端的连接在上面的代码中,当我们运行了一个客户端时,accpet()执行一次,当再有客户端连接时,就不再执行,因此程序到这里出现两个问题:
1)程序在accept处的假死
2)只能连接一个客户端
解决办法对应:
1)开启一个线程
2)循环
更改后的代码:
***********代码段2

        private void buttonStart_Click(object sender, EventArgs e)
        {
   

            Socket socketWatch = new Socket(AddressFamily
  • 4
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值