命名管道读写(c++/c#命名管道通信问题,服务端能读,不能写)

2026-05-13 19:30:02 :0

命名管道读写(c++/c#命名管道通信问题,服务端能读,不能写)

大家好,如果您还对命名管道读写不太了解,没有关系,今天就由本站为大家分享命名管道读写的知识,包括c++/c#命名管道通信问题,服务端能读,不能写的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

本文目录

c++/c#命名管道通信问题,服务端能读,不能写

// 
服务器可以接收客户端消息,但是不能发送消息,write函数一直阻塞,换用sw.write仍然一样的。 
//服务器端:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.IO.Pipes;
using System.Threading;
namespace FrmServer
{
    public partial class FrmServer : Form
    {
        
        public delegate void SetTextDelegate(string text);
         NamedPipeServerStream pipeServer; 
         StreamWriter sw;
         StreamReader sr;
        public FrmServer()
        {
            InitializeComponent();
            //process1.StartInfo.WorkingDirectory = AppDomain.CurrentDomain.BaseDirectory;
            //process1.StartInfo.FileName = "MiniFetion";
            //process1.Start();
            Thread th = new Thread(new ThreadStart(CreateNamedPipe));
            th.Start();
           
        }
        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                textBox1.Text = "PipeServer Message";
                byte buffer = Encoding.UTF8.GetBytes(textBox1.Text);
                pipeServer.Write(buffer,0,buffer.Length);
                label1.Invoke(new SetTextDelegate(SetTextDo), buffer);
            }
            catch (IOException ex)
            {
                label1.Text = ex.Message;
            }
        }
        private void CreateNamedPipe()
        {
            pipeServer = new NamedPipeServerStream("FetionPipe", PipeDirection.InOut, 1, PipeTransmissionMode.Byte);
            pipeServer.WaitForConnection();
            sw = new StreamWriter(pipeServer);
            sr = new StreamReader(pipeServer);
            sw.AutoFlush = true;
            if (pipeServer.IsConnected) 
            {
                label1.Invoke(new SetTextDelegate(SetTextDo), "管道客户端已连接");
            }
            //sw.Write("login",new UTF8Encoding(false));
            if (label1.InvokeRequired)
            {
                label1.Invoke(new SetTextDelegate(SetTextDo), "管道客户端已连接");
            }
            //监听管道
            while(true)
            {
                // Process the incoming message.
                //GetAnswerToRequest(pchRequest, pchReply, &cbReplyBytes);
                try
                {
                    if (label1.InvokeRequired)
                    {
                        byte;
                        pipeServer.Read(buffer, 0, 255);
                        label1.Invoke(new SetTextDelegate(SetTextDo), Encoding.UTF8.GetString(buffer));
                        Thread.Sleep(100);
                    }
                    //处理消息
                    
                }
                catch(IOException ex)
                {
                    if (label1.InvokeRequired)
                    {
                        label1.Invoke(new SetTextDelegate(SetTextDo),ex.Message);
                    }
                }
            }
        }
        public void SetTextDo(string text) { label1.Text = text; }
    }
}
//客户端
#include "stdafx.h"
#include "FetionPipe.h"
HANDLE CFetionPipe::hPipeClient = NULL;//初始化静态成员变量
HANDLE CFetionPipe::CreateClient()
{
 CString lpPipeName="\\\\.\\pipe\\FetionPipe";
 LPTSTR lpszPipename = new TCHAR;
 _tcscpy(lpszPipename, lpPipeName);
 /*if (WaitNamedPipe(lpszPipename, 5000)==false)
 {
  return NULL;
 }*/
 hPipeClient = CreateFile(
                 lpszPipename,
                 GENERIC_WRITE|GENERIC_READ,
                 0,
                 NULL, 
                 OPEN_EXISTING,
                 0,
                 NULL);
 while(true)
 {
  if(hPipeClient == INVALID_HANDLE_VALUE)
  {
   CString strLastError;
   strLastError.Format("%d",GetLastError());
   AfxMessageBox("Error open pipes, the Last Error number is:"+strLastError);
   Sleep(5000);
   hPipeClient = CreateFile(
     lpszPipename,
                 GENERIC_WRITE|GENERIC_READ,
                 0,
                 NULL, 
                 OPEN_EXISTING,
                 0,
                 NULL);
  }
  else
  {
   AfxMessageBox("Success open pipes");
   break;
  }
 }
  //设置管道状态 
 DWORD dwMode = PIPE_READMODE_BYTE; 
 BOOL fSuccess = SetNamedPipeHandleState( 
         hPipeClient,       // pipe handle 
         &dwMode,          // new pipe mode 
         NULL,             // don’t set maximum bytes 
         NULL);            // don’t set maximum time 
 if ( ! fSuccess) 
 {
  AfxMessageBox("Failed SetNamedPipeHandleState");
 }
 return hPipeClient;
}
DWORD WINAPI CFetionPipe::Listenner(LPVOID lpParameter)
 {
  //创建文件
  hPipeClient = CreateClient();//hPipeClient静态变量
  DWORD dwRead,dwWritten;
  TCHAR* Msg; 
  BOOL   fSuccess = FALSE; 
  DWORD cbRead, cbToWrite, cbWritten, dwMode;
  LPTSTR lpvMessage=TEXT("Msg:FetionPipe Success!");
  fSuccess = MsgWrite(lpvMessage);
  
  while(hPipeClient != INVALID_HANDLE_VALUE)
  {
   Msg = MsgRead();
   if(Msg!=NULL)
   {
    AfxMessageBox(Msg);
    MsgHandle(Msg);
   }
   
   }
   return 0;
 }
BOOL CFetionPipe::MsgHandle(TCHAR* pszMsg)
{
 pszMsg = TEXT("Received Message!");
 MsgWrite(pszMsg);
 return 0;
}
BOOL CFetionPipe::MsgWrite(TCHAR* pszMsg)//写管道消息
{
 BOOL   fSuccess = FALSE; 
 DWORD cbToWrite, cbWritten;
 LPTSTR lpvMessage = TEXT(pszMsg);
 cbToWrite = (lstrlen(lpvMessage)+1)*sizeof(TCHAR);        
 fSuccess = WriteFile( 
                 hPipeClient,            // pipe handle 
                 lpvMessage,             // message 
                 cbToWrite,              // message length 
                 &cbWritten,             // bytes written 
                 NULL);
   return fSuccess;
}
TCHAR* CFetionPipe::MsgRead()//读管道消息
{
 DWORD dwRead,dwWritten;
 TCHAR* chBuf = NULL; 
 BOOL   fSuccess = FALSE; 
 DWORD cbRead, cbToWrite, cbWritten, dwMode;
 do 
         { 
                 // Read from the pipe.                 
                 fSuccess = ReadFile( 
                         hPipeClient,     // pipe handle 
                         chBuf,           // buffer to receive reply 
                         BUFSIZ*sizeof(TCHAR),   // size of buffer 
                         &cbRead,         // number of bytes read 
                         NULL);           // not overlapped 
                 
                 if ( ! fSuccess && GetLastError() != ERROR_MORE_DATA )
                 {
                         break; 
                 }
     Sleep(100);
 
         } while (!fSuccess);  // repeat loop if ERROR_MORE_DATA
   return chBuf;
}

在为windows客户端读取共享列表时发生如下错误:错误2114

是不是在网络属性里没有选中“文件与打印机共享”?可以先看看是否没有启动相关的网络服务。

查找步骤为进入管理——-服务——启动“支持此计算机通过网络的文件、打印和命名管道共享……”。

具体步骤如下:

1、右键我的电脑——属性;

2、计算机管理——打开【服务和应用程序】;

3、点击【服务】;

4、找到【services】服务,右键单机,启动它!

现在再去共享一下试试!是不是可以了?

什么是【services】服务?

显示名称:Server

  • 进程名称:svchost.exe -k netsvcs

  • 微软描述:支持此计算机通过网络的文件、打印、和命名管道共享。如果服务停止,这些功能不可用。如果服务被禁用,任何直接依赖于此服务的服务将无法启动。

  • 补充描述:简单的说就是档案和打印的共享,除非你有和其它计算机共享,不然就关了。局域网文件/打印共享需要的。

  • 默认:自动

  • 建议:手动

关于命名管道读写到此分享完毕,希望能帮助到您。

命名管道读写(c++/c#命名管道通信问题,服务端能读,不能写)

本文编辑:admin

更多文章:


java取模运算(java中的取模%怎么样运算的具体的运算公式是什么)

java取模运算(java中的取模%怎么样运算的具体的运算公式是什么)

大家好,关于java取模运算很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于java中的取模%怎么样运算的具体的运算公式是什么的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对

2026年3月5日 13:30

怎么破解易语言做的软件卡密(我有一个用易语言写的软件,他是用我的机器码才能注册这个软件.我想知道如何破解这个注册码 QQ153309012)

怎么破解易语言做的软件卡密(我有一个用易语言写的软件,他是用我的机器码才能注册这个软件.我想知道如何破解这个注册码 QQ153309012)

其实怎么破解易语言做的软件卡密的问题并不复杂,但是又很多的朋友都不太了解我有一个用易语言写的软件,他是用我的机器码才能注册这个软件.我想知道如何破解这个注册码 QQ153309012,因此呢,今天小编就来为大家分享怎么破解易语言做的软件卡密

2025年11月29日 03:15

lambda c++(C++ 中括号函数名)

lambda c++(C++ 中括号函数名)

这篇文章给大家聊聊关于lambda c++,以及C++ 中括号函数名对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录C++ 中括号函数名c++14的新的语言特性dev c++中cannot convert ’int (*)[5

2026年9月12日 08:00

baseline脊柱侧弯测量尺(作为一项体检项目,脊柱侧弯的测量标准是什么样的)

baseline脊柱侧弯测量尺(作为一项体检项目,脊柱侧弯的测量标准是什么样的)

大家好,baseline脊柱侧弯测量尺相信很多的网友都不是很明白,包括作为一项体检项目,脊柱侧弯的测量标准是什么样的也是一样,不过没有关系,接下来就来为大家分享关于baseline脊柱侧弯测量尺和作为一项体检项目,脊柱侧弯的测量标准是什么样

2025年9月15日 17:30

reception中文(reception在法语里什么意思)

reception中文(reception在法语里什么意思)

本篇文章给大家谈谈reception中文,以及reception在法语里什么意思对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。本文目录reception在法语里什么意思英语in the consular reception hall

2025年6月14日 23:30

javamysql教程(java如何建立数据库(java创建mysql数据库))

javamysql教程(java如何建立数据库(java创建mysql数据库))

大家好,关于javamysql教程很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于java如何建立数据库(java创建mysql数据库)的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站

2026年8月29日 05:15

视频md5是什么(视频修改md5值有什么用)

视频md5是什么(视频修改md5值有什么用)

其实视频md5是什么的问题并不复杂,但是又很多的朋友都不太了解视频修改md5值有什么用,因此呢,今天小编就来为大家分享视频md5是什么的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目录视频修改md5值有什么用视频的

2025年8月27日 20:30

亚马逊雨林纪录片国语(亚马逊雨林在哪种地方睡觉休息一直很好奇哎!)

亚马逊雨林纪录片国语(亚马逊雨林在哪种地方睡觉休息一直很好奇哎!)

本篇文章给大家谈谈亚马逊雨林纪录片国语,以及亚马逊雨林在哪种地方睡觉休息一直很好奇哎!对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录亚马逊

2025年7月25日 00:00

相同函数的值域一定相同(同一函数值域也要相等吗)

相同函数的值域一定相同(同一函数值域也要相等吗)

“相同函数的值域一定相同”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看相同函数的值域一定相同(同一函数值域也要相等吗)!本文目录同一函数值域也要相等吗有相同的对应法则的函数的值域是否相同高中数学求解两个函数对应法则相同定义

2026年7月14日 07:45

css图片缩小比例不变(CSS强制图片大小 CSS图片大小如何自动缩放)

css图片缩小比例不变(CSS强制图片大小 CSS图片大小如何自动缩放)

其实css图片缩小比例不变的问题并不复杂,但是又很多的朋友都不太了解CSS强制图片大小 CSS图片大小如何自动缩放,因此呢,今天小编就来为大家分享css图片缩小比例不变的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文

2026年6月5日 14:45

索尼music transfer(索尼T100的闪光灯参数)

索尼music transfer(索尼T100的闪光灯参数)

今天给各位分享索尼T100的闪光灯参数的知识,其中也会对索尼T100的闪光灯参数进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录索尼T100的闪光灯参数SONY相机怎么下载音乐关于SONY T500的Pictu

2025年12月27日 09:30

capital和capitol(capitol唱片的capitol唱片简介)

capital和capitol(capitol唱片的capitol唱片简介)

大家好,capital和capitol相信很多的网友都不是很明白,包括capitol唱片的capitol唱片简介也是一样,不过没有关系,接下来就来为大家分享关于capital和capitol和capitol唱片的capitol唱片简介的一些

2025年12月12日 11:30

滚动条的代码(如何使用css修改滚动条默认样式的代码实例)

滚动条的代码(如何使用css修改滚动条默认样式的代码实例)

大家好,关于滚动条的代码很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于如何使用css修改滚动条默认样式的代码实例的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助

2026年3月31日 05:00

python全为字母的正则(python正则表达式:匹配所有的字母数字但是不匹配1080p这个单词如何操作)

python全为字母的正则(python正则表达式:匹配所有的字母数字但是不匹配1080p这个单词如何操作)

这篇文章给大家聊聊关于python全为字母的正则,以及python正则表达式:匹配所有的字母数字但是不匹配1080p这个单词如何操作对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录python正则表达式:匹配所有的字母数字但是

2025年11月27日 11:00

什么是类类与对象的区别是什么?MYSQLSET字段类型怎么查询

什么是类类与对象的区别是什么?MYSQLSET字段类型怎么查询

这篇文章给大家聊聊关于类,以及什么是类类与对象的区别是什么对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录什么是类类与对象的区别是什么MYSQLSET字段类型怎么查询抽象类和接口有什么区别float型的变量如何转换为int型J

2026年3月9日 02:30

sqrt计算公式(平方根怎么计算)

sqrt计算公式(平方根怎么计算)

这篇文章给大家聊聊关于sqrt计算公式,以及平方根怎么计算对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录平方根怎么计算平方根的公式标准偏差计算公式标准差的计算公式是什么开方计算公式开方公式开根号公式怎么计算平方根怎么计算67

2025年7月2日 10:30

249个shell脚本(shell 脚本处理)

249个shell脚本(shell 脚本处理)

“249个shell脚本”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看249个shell脚本(shell 脚本处理)!本文目录shell 脚本处理怎样编写shell脚本实现统计一个小组的成绩情况,统计信息包括:总分,平均分

2025年11月18日 01:00

javascript基础教程是必修课吗(初中生学计算机最开始要学什么)

javascript基础教程是必修课吗(初中生学计算机最开始要学什么)

各位老铁们好,相信很多人对javascript基础教程是必修课吗都不是特别的了解,因此呢,今天就来为大家分享下关于javascript基础教程是必修课吗以及初中生学计算机最开始要学什么的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一

2025年7月1日 11:00

perhaps怎么用(perhaps的用法)

perhaps怎么用(perhaps的用法)

大家好,如果您还对perhaps怎么用不太了解,没有关系,今天就由本站为大家分享perhaps怎么用的知识,包括perhaps的用法的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!本文目录perhaps的用法perhaps

2025年8月28日 01:00

vb资料管理系统(vb+access做的一个管理系统怎么能实现在局域网内的数据库共享)

vb资料管理系统(vb+access做的一个管理系统怎么能实现在局域网内的数据库共享)

“vb资料管理系统”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看vb资料管理系统(vb+access做的一个管理系统怎么能实现在局域网内的数据库共享)!本文目录vb+access做的一个管理系统怎么能实现在局域网内的数据库

2026年5月23日 03:30

近期文章

conduct well behave well(behaviour 和behavior有什么区别)
2026-09-25 03:00:02
本站热文

electronics软件(labcenter electronics是什么软件)
2025-05-22 23:45:02 浏览:134
博客是微博吗(博客是微博吗)
2025-05-22 22:45:01 浏览:111
diversity and distribution(悬赏英语短文)
2025-05-23 16:15:02 浏览:107
ios软件开发前景(iOS就业前景怎么样)
2025-05-22 23:00:01 浏览:102
next month(有The next month这个单词吗,和 next month有什么区别)
2025-05-23 02:30:01 浏览:102
patron(patron是什么意思)
2025-05-23 10:30:02 浏览:95
标签列表

热门搜索