VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 959|回复: 9

关于TCP通讯的问题

[复制链接]

1

主题

6

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
发表于 2020-1-24 22:00:01 | 显示全部楼层 |阅读模式
当进行TCP监听时,有客户连接,怎么接受完客户的信息,立即发送信息给客户呢?
TcpClient MyTcpClient=MyTcpListener.AcceptTcpClient();
                                NetworkStream MyStream=MyTcpClient.GetStream();
                                byte[] MyBytes = new byte[1024];
                                int MyBytesRead=MyStream.Read(MyBytes,0,MyBytes.Length);
                                string MyMessage=System.Text.Encoding.Default.GetString(MyBytes,0,MyBytesRead);
                                cmd=MyMessage;       
                                this.richTextBox1.Text+=cmd;
                               
                                cmd="HELLO WORLD!";
                                StreamWriter MyStreamS=new StreamWriter(MyStream);
                            MyStreamS.Write(cmd);
                                MyStreamS.Flush();
                                MyStreamS.Close();
                                MyTcpClient.Close();
回复

使用道具 举报

0

主题

14

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
发表于 2020-2-11 22:15:01 | 显示全部楼层
直接用GetStream()得到的那个 MyStream.Write(...);
回复

使用道具 举报

1

主题

6

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
 楼主| 发表于 2020-2-12 10:45:01 | 显示全部楼层
可是这样也提示出错啊
TcpClient MyTcpClient=MyTcpListener.AcceptTcpClient();
                                NetworkStream MyStream=MyTcpClient.GetStream();
                                byte[] MyBytes = new byte[1024];
                                int MyBytesRead=MyStream.Read(MyBytes,0,MyBytes.Length);
                                string MyMessage=System.Text.Encoding.Default.GetString(MyBytes,0,MyBytesRead);
                                cmd=MyMessage;       
                                this.richTextBox1.Text+=cmd.Substring(4,11);
                                //解释执行
                                cmd="HELLO WORLD!";
                            MyStream.Write(cmd);
                                MyStream.Flush();
                                MyStream.Close();
                                MyTcpClient.Close();
回复

使用道具 举报

1

主题

6

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
 楼主| 发表于 2020-2-12 17:45:02 | 显示全部楼层
又用了如下方法也没有解决
TcpClient MyTcpClient=MyTcpListener.AcceptTcpClient();
                                NetworkStream MyStream=MyTcpClient.GetStream();
                                byte[] MyBytes = new byte[1024];
                                int MyBytesRead=MyStream.Read(MyBytes,0,MyBytes.Length);
                                string MyMessage=System.Text.Encoding.Default.GetString(MyBytes,0,MyBytesRead);
                                cmd=MyMessage;       
                                this.richTextBox1.Text+=cmd.Substring(4,11);
                                cmd="HELLO WORLD!";
                                byte[] byteTime = Encoding.ASCII.GetBytes(cmd);
                            MyStream.Write(byteTime,0,byteTime.Length);
                                //MyStream.Flush();
                                MyStream.Close();
                                MyTcpClient.Close();
回复

使用道具 举报

0

主题

3

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-3-23 23:00:01 | 显示全部楼层
TcpListener MyTcpListener = new TcpListener(9999);
            MyTcpListener.Start();
            TcpClient MyTcpClient = MyTcpListener.AcceptTcpClient();
            NetworkStream MyStream = MyTcpClient.GetStream();
            byte[] MyBytes = new byte[1024];
            int MyBytesRead = MyStream.Read(MyBytes, 0, MyBytes.Length);
            string MyMessage = System.Text.Encoding.Default.GetString(MyBytes, 0, MyBytesRead);
            string cmd = MyMessage;
            //this.richTextBox1.Text += cmd.Substring(4, 11);
            cmd = "HELLO WORLD!";
            byte[] byteTime = Encoding.ASCII.GetBytes(cmd);
            MyStream.Write(byteTime, 0, byteTime.Length);
            //MyStream.Flush();
            MyStream.Close();
            MyTcpClient.Close();
            Console.Read();
回复

使用道具 举报

1

主题

6

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
 楼主| 发表于 2020-4-14 02:45:01 | 显示全部楼层
楼上这位大哥,好象没有什么区别啊
回复

使用道具 举报

1

主题

6

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
 楼主| 发表于 2020-4-14 17:30:02 | 显示全部楼层
楼上的意思我不明白,可否再指点一下?
回复

使用道具 举报

0

主题

119

帖子

67.00

积分

新手上路

Rank: 1

积分
67.00
发表于 2020-4-15 16:00:02 | 显示全部楼层
异步回调方式:
mainSocket.BeginAccept(new AsyncCallback(OnClientConnect), null);
楼主可参考相关资料!
回复

使用道具 举报

1

主题

6

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
 楼主| 发表于 2020-4-17 12:30:01 | 显示全部楼层
我的想法是在服务端得到客户端的消息后在服务端显示,然后立即从服务端发送消息给客户端,这个应该不负责吧,可是为什么我按我前面的代码却出现客户端不能收到服务端信息的情况。能否给出一写资料,谢谢
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-8-25 20:00:01 | 显示全部楼层
我的想法是在服务端得到客户端的消息后在服务端显示
= 这个一点问题也没有,异步接收即可

然后立即从服务端发送消息给客户端
= 问题来了:发信息没问题,但是你如何知道客户端的状态?换句话说,你如何知道客户端已经准备好接收了?

应该使用两个分线程,一个用来监听并且接受客户端的连接请求,并且把这些请求加入一个列表;另一个线程不断运行Socket.Select,将列表中的Socket进行筛选,判断客户端的状态,为等待接收或者等待发送。然后,使用异步接收或者发送,来处理客户端的请求。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表