c#中tcp异步编程遇到异常问题,新手感觉很不得懂 希望大神能从浅显的角度帮我解答

//发起连接请求privatevoidConnectoServer(){AsyncCallbackrequestcallback=newAsyncCallback(Req... //发起连接请求
private void ConnectoServer()
{
AsyncCallback requestcallback = new AsyncCallback(RequestCallBack);
statusStripInfo.Invoke(shwStatusInfoCallBack, "正在连接...");
statusStripInfo.Invoke(shwProgressProcCallBack, 1);
//tcpClient = new TcpClient(AddressFamily.InterNetwork);//获得本机的ip地址
tcpClient = new TcpClient(host,52888);
//tcpClient = new Socket(AddressFamily.InterNetwork,);
IAsyncResult result = tcpClient.BeginConnect(IPAddress.Parse(tbxSrvIp.Text), int.Parse(tbxPort.Text), requestcallback, tcpClient); //异步操作1
注:host是在之前定义过的一个ip地址
这个一个客户端的部分代码,源代码本来是:
//tcpClient = new TcpClient(AddressFamily.InterNetwork);//获得本机的ip地址。
运行时没有错误,但是我不想这里指定本机ip,我想指定一个固定的服务器ip,所以讲其注释掉改成:
tcpClient = new TcpClient(host,52888);host为我指定的ip
编译时候没有错误,在窗口中点击连接时,就出现异常

其实tcp编程还不是很会,希望好心人能帮我解答。
展开
 我来答
whm412
2013-05-08 · TA获得超过515个赞
知道小有建树答主
回答量:289
采纳率:66%
帮助的人:277万
展开全部
注:host是在之前定义过的一个ip地址
这个一个客户端的部分代码,源代码本来是:
//tcpClient = new TcpClient(AddressFamily.InterNetwork);//获得本机的ip地址。
运行时没有错误,但是我不想这里指定本机ip,我想指定一个固定的服务器ip,所以讲其注释掉改成:
tcpClient = new TcpClient(host,52888);host为我指定的ip
上面是你理解的有问题。
第一:tcpClient = new TcpClient(AddressFamily.InterNetwork);这句话不是获得本机的ip地址,而是要创建一个使用ip版本4的寻址方案的TcpClient对象。这时只是定义这个对象,并没有建立连接
第二:tcpClient = new TcpClient(host,52888);这句代码的意思是建立一个连接到host和其端口52888的连接,在创建时就已经连接上了。这里的host指的是你要连接的服务器IP地址。此时在创建时已经建立连接了,所以在使用BeginConnect异步调用时,抛出一个【在一个已经建立连接的套接字上做一个连接请求。

你理解上面的内容,应该就可以解决你的问题了。
追问
非常感谢你对我的回答,才开始学c#确实搞不定。那原来程序是tcpClient = new TcpClient(AddressFamily.InterNetwork)这句只是定义了对象 并没有实例化,那在使用异步操作 IAsyncResult result = tcpClient.BeginConnect(IPAddress.Parse(tbxSrvIp.Text), int.Parse(tbxPort.Text), requestcallback, tcpClient);时 是如何找到ip的呢??我又想了想 我是不是应该在(IPAddress.Parse(tbxSrvIp.Text)这个参数中去得到ip地址呢??
追答
那在使用异步操作 IAsyncResult result = tcpClient.BeginConnect(IPAddress.Parse(tbxSrvIp.Text), int.Parse(tbxPort.Text), requestcallback, tcpClient);时 是如何找到ip的呢??我又想了想 我是不是应该在(IPAddress.Parse(tbxSrvIp.Text)这个参数中去得到ip地址呢??

BeginConnect方法,在此时有四个参数,第一个就是服务器的IP地址,第二个是服务器的端口。
tbxSrvIp.Text应该是是服务器IP地址,tbxProt.Text就是服务器端口。
你想得到什么ip地址?是你本机的IP地址还是服务器的IP地址?
无名氏0428
2013-05-07 · 超过18用户采纳过TA的回答
知道答主
回答量:34
采纳率:0%
帮助的人:44万
展开全部
你这样写呢 TcpCilent tcpClient= new TcpClient();
client.Connect("localhost",52888);不行再问。 如果想改成别的IP地址则把localhost改成对应的“127.0.0.1”格式 的IP地址,记得带双引号。
追问
不知道 这样改了要出错
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
空雪梦见
2013-05-08 · TA获得超过5597个赞
知道大有可为答主
回答量:2522
采纳率:75%
帮助的人:1156万
展开全部
( n u l l )
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式