一台机器上实现既是server端又是client端的socket

wangRMB250 2011-08-24 02:37:11
这台机器要和另外机器相连,实现两台机器的通信,
通信是这样的:有机器1和机器2,机器1是服务端,发送数据给机器2(机器2是客户端),同时,机器2是服务端,发送数据给机器2(机器2是客户端),本人想在机器1上建立两个socket,分别实现两路数据的通信和传送
两个socket的通信是互不干涉和影响的

有没有哪位高人做过类似的程序,给我指点一下,或者提供一些相关的资料?谢谢
...全文
2962 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
PG 2011-08-24
  • 打赏
  • 举报
回复
创建的每个socket都是独立的,独立表示通讯链路。所有一些什么几个socket同时收发数据会不会污染啊,冲突啊,破坏数据啊等的问题你就不用担心了。
hui12345685 2011-08-24
  • 打赏
  • 举报
回复
用多线程你想要多少客户端,多少服务端都没有问题
hui12345685 2011-08-24
  • 打赏
  • 举报
回复 1
用多线程,一个线程做客户端,一个线程做服务端。
yby4769250 2011-08-24
  • 打赏
  • 举报
回复 2
你对socket的认识是不是不够啊?socket也就是进程间通信的一种方式,和共享内存、消息队列等是差不多一种功能的东西,只不过是socket多了夸网络间进程通信的方法还有其他的一些性质罢了。
因此,所谓的通信,根本就不是你考虑的机器1和机器2间的通信,而是socket1和socket2所在的进程间的通信,所以,你建立N个socket,只要绑定了互相知道的端口和地址,到时候,就是连接,send,recv的事情。
你所看到的机器1和机器2间的通信,是非专业人士看到的通信,程序员看到的,应该是进程1和进程2间,通过socket的通信。
这是对事物的本质的理解问题吗,希望对你有帮助
jackyjkchen 2011-08-24
  • 打赏
  • 举报
回复
如果一定要用tcp,bind的socket(接收)和发起connect的socket(发送),要独立,向大家之前说的那样
jackyjkchen 2011-08-24
  • 打赏
  • 举报
回复
都在搞什么飞机,udp不就行了,无连接的,想发就发,绑个端口就能接,一个socket就行

当然,不能像tcp那样保证质量
夹心饼干 2011-08-24
  • 打赏
  • 举报
回复
当然,在ControllSocket 中可以添加统一的读写buffer区,方便以后可能的IO线程和实际
要处理的逻辑线程的分离,IO线程纯粹就是首发数据并打包给逻辑线程使用
夹心饼干 2011-08-24
  • 打赏
  • 举报
回复
class Socket
{
public:
virtual CreateSocket(...){}
virtual BindPort(...){}
virtual ConnectServer(...){}
virtual Listen(..){}
virtual Read(){..}
virtual Write(...){}
}

class ClientSocket : public Socket
{
virtual CreateSocket(...){}
virtual ConnectServer(...){}
virtual Read(){..}
virtual Write(...){}
}

class ServerSocket : public Socket
{
virtual CreateSocket(...){}
virtual BindPort(...){}
virtual Listen(..){}
virtual Read(){..}
virtual Write(...){}
}

class ControllSocket : public Socket
{
public:
virtual Read(){..}
virtual Write(...){}
void AddSocket(Socket &){}
void RemoveSocket(Socket &){}
void WatiEvent(){}//在IO线程中调用,等待网络事件发生,从m_listSock
//取出对应事件的Socket,调用对应的read/write
private:
std::list<Socket*> m_listSock;
}

大致是这个模型就可以了,不要执着于是哪个机器,所有的这些只跟你创建的socket实例有关系
至善者善之敌 2011-08-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wangrmb250 的回复:]
引用 2 楼 ouyh12345 的回复:
建2个socket就行了,确保端口不同

但是只有一个网口的,也就是说只有一个IP
[/Quote]
跟网口木关系,跟端口有关系,两套SOCKET帮顶2个端口
healer_kx 2011-08-24
  • 打赏
  • 举报
回复
。。。 。。。
wyfwx 2011-08-24
  • 打赏
  • 举报
回复
开不同的端口就行了
luciferisnotsatan 2011-08-24
  • 打赏
  • 举报
回复
google下不就有很多socket通信的代码。
wangRMB250 2011-08-24
  • 打赏
  • 举报
回复
其实我也是准备创建两个socket的,但是老是迷糊这点
大侠有没有这方面的资料或者程序实例啊
给指点一下,谢谢
luciferisnotsatan 2011-08-24
  • 打赏
  • 举报
回复
机器1,建个socket,监听一个端口,机器2,建个socket,监听一个端口。然后各机器再建个socket,去连接另一台机器的server不就型了。client本身好像没法指定端口的,机器自己找的(除非你做底层,自己设)。
youyou1986925 2011-08-24
  • 打赏
  • 举报
回复
socket是全双工的啊,为什么还要弄两个socket……你问题描述的不是很清楚啊
luciferisnotsatan 2011-08-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wangrmb250 的回复:]

引用 2 楼 ouyh12345 的回复:
建2个socket就行了,确保端口不同

但是只有一个网口的,也就是说只有一个IP
[/Quote]
端口不同就行了。实际上只要server绑定到你指定的端口就行了。client会自己发现并使用一个零时端口。
wangRMB250 2011-08-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ouyh12345 的回复:]
建2个socket就行了,确保端口不同
[/Quote]
但是只有一个网口的,也就是说只有一个IP
ouyh12345 2011-08-24
  • 打赏
  • 举报
回复
建2个socket就行了,确保端口不同
wangRMB250 2011-08-24
  • 打赏
  • 举报
回复
不好意思,解释错误。
通信应该是这样的:有机器1和机器2,机器1是服务端,发送数据给机器2(机器2是客户端),同时,机器2是服务端,发送数据给机器1(机器1是客户端),分别实现两路数据的通信和传送,本人想在机器1上建立两个socket,两个socket的通信是互不干涉和影响的

65,176

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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