• 全部
...

client和server怎样在一个程序里同时运行

youunknow 2011-03-04 10:11:24
各位好:

我在一个程序里声明了两个socket分别是client和server。
我希望通过client给server发ping包,类似于ping127.0.0.1的效果,但是sever总是控制不好,或者是拥塞模式搞的界面刷不出来,或者是显示不能立即完成一个非阻挡性套接字操作,我也试过使用beginaccept的方法,但同样不好使,求各位给帮帮忙。小弟这里散分了,谢谢。
...全文
给本帖投票
914 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
qldsrx 2011-03-04
  • 打赏
  • 举报
回复
自己连自己当然可以了,Socket对象本身就无所谓客户端或者服务端,开着监听的那个Socket对象就是服务端,主动去连的那个Socket对象就是客户端,你创建两个这样的Socket对象不就好啦(必须使用多线程)
youunknow 2011-03-04
  • 打赏
  • 举报
回复
一个程序不能同时开severSocket和ClientSocket吗?
zzmsyt 2011-03-04
  • 打赏
  • 举报
回复
向楼主致敬!
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 youunknow 的回复:]
就是想实现自己ping自己啊。写在一个程序里不行吗?
[/Quote]

自己ping自己不关Client/Server什么事吧
youunknow 2011-03-04
  • 打赏
  • 举报
回复
就是想实现自己ping自己啊。写在一个程序里不行吗?
flyerwing 2011-03-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 sp1234 的回复:]
没有东西可抄。
再深入一点原理,从头学学吧。
[/Quote]
如果运行到一块有什么用呀?
不就是通讯了吗.肯定得分开才能通讯.
youunknow 2011-03-04
  • 打赏
  • 举报
回复
谢谢各位帮帮忙吧。呵呵。
  • 打赏
  • 举报
回复
没有东西可抄。

再深入一点原理,从头学学吧。
qldsrx 2011-03-04
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 youunknow 的回复:]
我想同时可以监听10个链接,可以都在这个端口上吗?呵呵。不懂。请指教
[/Quote]
监听是只能监听一个本机的IP+端口号,至于多少个链接进来访问,这和监听方无关,哪怕1000个链接都可以,但是访问时得用你监听方监听的那个端口号来Connect
xonln 2011-03-04
  • 打赏
  • 举报
回复
请用VS的调试功能,可以同时运行的
youunknow 2011-03-04
  • 打赏
  • 举报
回复
我试试看,要是不行还请多指教。呵呵
缭绕飘渺 2011-03-04
  • 打赏
  • 举报
回复
缺乏看书
google下例子看看
建议整两个类,一个server类,一个client类,封装好socket连接,
然后生成类对象
youunknow 2011-03-04
  • 打赏
  • 举报
回复
我想同时可以监听10个链接,可以都在这个端口上吗?呵呵。不懂。请指教
qldsrx 2011-03-04
  • 打赏
  • 举报
回复
请问你这是在监听本机什么端口?服务Socket必须是一个固定的已知端口,否则你客户Socket如何去连接?
Math.Abs((int)DateTime.Now.Ticks % 32768)
youunknow 2011-03-04
  • 打赏
  • 举报
回复
监听的就像这样

private void Listen()
{
try
{
while (true)
{
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress hostIP = (Dns.Resolve(IPAddress.Any.ToString())).AddressList[0];
IPEndPoint ep = new IPEndPoint(hostIP,Math.Abs((int)DateTime.Now.Ticks % 32768));
s.Bind(ep);
s.Listen(10);
s.BeginAccept(new AsyncCallback(listencallback), s);
}
}
catch(Exception ex)
{ MessageBox.Show(ex.Message); }
}

private void listencallback(IAsyncResult ar)
{
try
{
Socket Handler = Listener.EndAccept(ar);
}
catch (Exception ex)
{ MessageBox.Show(ex.Message); }
}
qldsrx 2011-03-04
  • 打赏
  • 举报
回复
积极拒绝说明你的服务并未打开,你贴下部分代码看下,只要连接部分(包括服务监听开启)即可,数据收发不需要。
youunknow 2011-03-04
  • 打赏
  • 举报
回复
我现在就是开了两个线程啊,但是如果不用异步方式的话就会拥塞,如果用异步方式的话,clinet在连接本机时会显示目标主机积极拒绝。
olfile readme file. [1. 文件名解释] olfile: Offload File 这个工具原本是项目中为测试TOE引擎的效率而设计的, 可以作为socket编程的一个例子来学习。 [2. 文件介绍] 程序中使用socket实现了文件的传输。 在VC6.0中编译通过,目录中olfile.cpp/olfile.h是原文件,可以任意修改,不过请不要改动文件头的作者信息。 有两个目录:serverclient,其实编译出来的东西是一样的,当时是为了测试方便才分出来的。 可以直接打开client目录中的工程来编译。 [3. 使用介绍] 程序client端和server端,server 端监听,client端使用命令行方式发送或接收文件。 在VC6.0中编译生成olfile.exe,使用不同的选项启动clientserver。 比如,我们有两台机器10.190.1.1(A), 10.190.1.2(B),加入都运行windows,想把A的c:foo.dat传到B,并放在B的c:foodst.dat, 则需要在B启动server: olfile -server A启动client进行传输: olfile -src c:foo.dat -dst c:foodst.dat -ip 10.190.1.2 -y -src 表示源文件的位置 -dst 表示目标文件的位置 -ip 表示远程主机的IP。 -y 表示如果远程主机上的目标文件位置原来有文件,则强制覆盖。 可以看出,可以让A当作Server,B当作Client,使用不同的命令行实现上面的文件传递: A启动server: olfile -server B启动client 进行文件传输,这时B的c:foodst.dat是目标: olfile -dst c:foodst.dat -src c:foo.dat -ip 10.190.1.1 -y [4.兼容性] 附带的Makefile文件表明,代码可以在Linux下正常编译。所以,可以运行在Linux下,实现Linux与Windows文件的互传。 可能的命令行会变成: olfile -dst /home/foodst.dat -src c:foo.dat -ip 10.190.1.1 -y [5. 局限和可能存在的问题] 1.程序不会对你所使用的系统产生致命影响,因为它仅仅是一个socket 实例。 2.server 在进行一次文件传输之后就退出,因为程序是单一线程的。 3.可以利用程序的打印输出看一下大概的传输速度(因为这时我当时在项目中写这个工具的原因)。

111,085

社区成员

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

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

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

手机看
关注公众号

关注公众号

客服 返回
顶部