socket发送字符串,不要转换成byte[]流

caijia 2008-08-27 11:53:01
别人做的一个系统提供一个端口的接口我来调用,,必须得用tcp/ip进行发送操作命令,,但是我这边发送byte[]流,别人根本接手不到
就是发送一个字符串,,不要转换成byte[]流发送
string connisCanStr="";//声明探测连接是否成功的字符串
string commisStr="";
Socket sock=null;
try
{
string connStr="conn test....";
sock=NetService.ConnectServer("192.168.100.40",9998);
byte[] connBs=Encoding.ASCII.GetBytes(connStr);
sock.Send(connBs,connBs.Length,0);//发送命令
byte[] connBytes=new byte[20];//声明字节数组,
int isconnbytes=0;//返回实际接受内容的字符数
isconnbytes=sock.Receive(connBytes,connBytes.Length,0);
connisCanStr=Encoding.ASCII.GetString(connBytes,0,isconnbytes);
//sock.Close();

if(connisCanStr.Substring(0,1)=="+"){
string commandStr="add(domain){\ndomainname=bbbbb.com\ndomain=bbbbb.com\nuserPassword=123456\n}\n.";
byte[] commBy=Encoding.ASCII.GetBytes(commandStr);
sock.Send(commBy,commBy.Length,0);
byte[] recvCommby=new byte[1024];
int recvcommbycount=0;
recvcommbycount=sock.Receive(recvCommby,recvCommby.Length,0);
commisStr=Encoding.ASCII.GetString(recvCommby,0,isconnbytes);
}
}
catch(Exception ex)
{
if(sock!=null)
{
sock.Close();
}
}
finally{
// string quitStr="exit\r";
// byte[] quitbs=Encoding.ASCII.GetBytes(quitStr);
// sock.Send(quitbs,quitbs.Length,0);
// sock.Close();
}
Console.WriteLine(connisCanStr+"\n"+commisStr);
Console.ReadLine();

以下是别人提供的文档。
推荐使用高级模式编写连接程序。所以重点介绍针对高级模式进行介绍。
首先以tcp 方式连接eyou_scriptd 高级模式端口。连接成功,会返回服务器端的反
馈信息,如果允许连接则返回一行这样的文字”+0000 hello”。
eyou_scriptd高级模式返回的信息都是一行以回车结束的字符串,格式为以’+’或’-’
开头,然后接四位数字,如果不足四位,前面补0,之后一个空格之后是一个描述状态
的字符串。如果字符串以’+’开头,则表明操作成功(等效于简单模式的’succ’),如果以’-’
开头则表明发生错误(等效于简单模式的’fail’),后面的数字是错误号码,空格之后的字
符串是错误的具体描述。可以用来作为调试信息。
得到连接成功的操作信息,就可以发送操作命令。操作命令结束之后在一个新行中
发送一个单独的’.’提交执行。服务器对命令进行分析执行,返回上述格式的反馈信息。
从中分析执行结果。
退出并断开连接,在一个新行中发送’exit’并回车。则服务器断开连接
...全文
745 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhanglin_cstp 2009-03-26
  • 打赏
  • 举报
回复
别老拿你公司的来说行吗?你说的只是个现象
Socket还是发送byte的
你如果说不是你把你的程序贴出来
让大伙看看,
当然封装过的就不看了,
就看你没封装的那部分

Socket发送byte 已经真理了不用争论

4楼说的不错
发送方:string -> byte[]
接受方:byte[] -> string
sytu_hzj 2008-08-27
  • 打赏
  • 举报
回复
发送方:string -> byte[]
接受方:byte[] -> string
LovingAlison 2008-08-27
  • 打赏
  • 举报
回复
接受方解析下byte
卧_槽 2008-08-27
  • 打赏
  • 举报
回复
不可能不转换。只能在接收端再转回来才行
haonanzhao 2008-08-27
  • 打赏
  • 举报
回复
发送的时候必须转换为byte,对方解析一下就可以了。
caijia 2008-08-27
  • 打赏
  • 举报
回复
我用telnet 192.168.100.40 9998可以连接上.
用程序也可以连接上,对方程序部署在linux上,做成那种控制台程序了,所以必须用tcp/ip发送命令方式进行调用。
我公司java开发人员说是java可以直接发送字符串。。
我调了2天还没调上,,问别人系统技术人员,别人说我们这个系统就是这么做的,文档也是这样的,其他人来调都可以的。。
我郁闷额。。
zhujiechang 2008-08-27
  • 打赏
  • 举报
回复
昏倒,最终发送无论发什么都是通过byte[]型式出去的,接收上只是重新编码上的问题
wdgphc 2008-08-27
  • 打赏
  • 举报
回复
应该没问题吧,字符串都是通过byte[]形式发出去的.对方接收到的应该就是字符串.

关键你看看
sock=NetService.ConnectServer("192.168.100.40",9998); 是否连接成功?
byte[] connBs=Encoding.ASCII.GetBytes(connStr);
sock.Send(connBs,connBs.Length,0);//发送命令 ? 为什么不直接写sock.Send(connBs);
slimfeng 2008-08-27
  • 打赏
  • 举报
回复
除非Socket类被封装,但是从代码看,Socket没有被封装,不知道怎么去实现
caijia 2008-08-27
  • 打赏
  • 举报
回复
别人已经做好的东西,不可能再解析了

111,120

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧