winform的TcpListener TcpClient问题,请高手帮忙解答,很着急,在线等,谢谢

dbmonths 2012-05-19 10:40:47
请问:
1,下面的客户端服务器端连接,为什么只能连接一次?第二次就连接不上了
2,是多客户端连接,请指教,谢谢,在线等
ServerFrm.cs
/**********TcpListener和TcpClient研究********** 
* 要点一:TcpListener起动后,如果有客户请求,就会建立一个TcpClient连接.
* 要点二:通过TcpClient取得NetworkStream对象
* 要点三:通过NetworkStream的Write和Read方法向连接的另一端发或接收数据
* 要点四:传输的数据只能是字符流,需要编码.
**********************************************/
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;

using System.Net;
using System.Net.Sockets;
using System.Threading;

namespace WinNet
{
public partial class ServerFrm : Form
{
private Thread processor;
private TcpListener tcpListener;
string clientStr;
public ServerFrm()
{
InitializeComponent();
ServerFrm_Load();
}

private void ServerFrm_Load()
{
//需要在新的线程里监听客户端
try
{
processor = new Thread(new ThreadStart(StartListening));
processor.Start();
}
catch (Exception ex)
{
}
}
private void StartListening()
{
//创建一个监听对象
tcpListener = new TcpListener(IPAddress.Any, 8081);
tcpListener.Start();
//循环监听
while (true)
{
try
{
//取得客户端的连接
TcpClient tcpClient = tcpListener.AcceptTcpClient();
//取得客户端发过来的字节流
NetworkStream clientStream = tcpClient.GetStream();
//把字节流读入字节数组
byte[] buffer = new byte[51];
clientStream.Read(buffer,0,51);
//不可以在此直接设置this.Text,线程问题.
clientStr = System.Text.Encoding.ASCII.GetString(buffer);


string strURL = "http://65.58.53.45:8088/data.aspx";
HttpWebRequest request;

request = (HttpWebRequest)WebRequest.Create(strURL);
//Post请求方式
request.Method = "POST";
//内容类型
request.ContentType = "application/x-www-form-urlencoded";
//参数经过URL编码
string paraUrlCoded = "value=22";//测试数据
byte[] payload;
//将URL编码后的字符串转化为字节
payload = System.Text.Encoding.UTF8.GetBytes(paraUrlCoded);
//设置请求的ContentLength
request.ContentLength = payload.Length;
//获得请求流
Stream writer = request.GetRequestStream();
//将请求参数写入流
writer.Write(payload, 0, payload.Length);

//关闭请求流
writer.Close();
}
catch
{
}
}
}

}
}





ClientFrm.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

using System.Net;
using System.Net.Sockets;

namespace WinNet
{
public partial class ClientFrm : Form
{
private TcpClient tcpClient;
public ClientFrm()
{
InitializeComponent();
tcpClient = new TcpClient();
IPHostEntry host = Dns.GetHostEntry("127.0.0.1");
tcpClient.Connect(host.AddressList[0], 8081);
}

private void ClientFrm_Load(object sender, EventArgs e)
{
//这就是服务器与客户端的一条通讯线路

//得到服务器端IP,然后建立一个连接

//取得数据流
NetworkStream clientStream = tcpClient.GetStream();
//只能向服务器发送字节流,所以要编码
byte[] response = new byte[this.textBox1.Text.Length];
response = System.Text.Encoding.ASCII.GetBytes(this.textBox1.Text.ToCharArray());
//通过Write方法把客户端数据发向服务器
clientStream.Write(response, 0, this.textBox1.Text.Length);
}

}
}
...全文
331 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
dbmonths 2012-05-19
  • 打赏
  • 举报
回复
高手先吃饭了,下午1点开始,希望你们能帮忙,谢谢
dbmonths 2012-05-19
  • 打赏
  • 举报
回复
我的意思是
1,客户端只能发送一次数据,发送2次就不能成功了
2,2个客户端就连接不上了
bdmh 2012-05-19
  • 打赏
  • 举报
回复
测试通过,两次创建客户端,均可正常连接

你是说tcp连不上,还是网址连不上
datacloud 2012-05-19
  • 打赏
  • 举报
回复
代码没问题啊,我这里调试可以通过。
dbmonths 2012-05-19
  • 打赏
  • 举报
回复
难道礼拜天高手们都在睡觉吗。。。。UP,在线等
bdmh 2012-05-19
  • 打赏
  • 举报
回复
设置一下 ExclusiveAddressUse = false 看看
dbmonths 2012-05-19
  • 打赏
  • 举报
回复
谢谢,我去看看
test2050 2012-05-19
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20100612/09/ecdb9f2b-ebb4-41a1-979c-025775bb5086.html
test2050 2012-05-19
  • 打赏
  • 举报
回复
http://www.cnblogs.com/stone/archive/2005/04/26/145391.html
这篇文章应该能满足你的要求
dbmonths 2012-05-19
  • 打赏
  • 举报
回复
是这一行阻塞了,请问应该如何解决呢,谢谢TcpClient tcpClient = tcpListener.AcceptTcpClient();
dbmonths 2012-05-19
  • 打赏
  • 举报
回复
问题我看出来了,是TcpClient tcpClient = tcpListener.AcceptTcpClient();第二次的时候到这里就终止了,看网上介绍说是阻塞进程了,请问这种情况应该怎么处理呢?网上难道就没有做过这样功能的人吗?我怎么找了半天了,从早晨9点到现在,就没有找到一个合适的代码。。。
dbmonths 2012-05-19
  • 打赏
  • 举报
回复
ServerFrm.cs 服务端程序
ClientFrm.cs 客户端程序
在第一楼上,请看
test2050 2012-05-19
  • 打赏
  • 举报
回复
不好意思看错了,你把服务端代码的线程处理先去掉试试。
test2050 2012-05-19
  • 打赏
  • 举报
回复
那你要把服务端程序贴出来了。
dbmonths 2012-05-19
  • 打赏
  • 举报
回复
请问高手如何修改能让服务器端不停的监听数据呢?并且连接的tcpclient能够不断的发送数据,谢谢
缭绕飘渺 2012-05-19
  • 打赏
  • 举报
回复
怀疑你那服务器端程序根本没有继续监听
在你第一个连接连上后
你自己netstate看看
dbmonths 2012-05-19
  • 打赏
  • 举报
回复
高手们,求解答

111,126

社区成员

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

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

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