我的服务端socket同时监听多个客户端socket1,socket2,----,建立连接后客户端就开始向服务端发送数据,同时服务端也可以更改命令参数,然后发送给客户端。
我的问题是1、怎么判断是那个客户端和服务端建立了连接?
2、服务端要发送给第一个客户端,那怎么判断是发送给了第一个客户端?
是不是每个客户端都要建立一个什么标志,然后先发送这个标志呢?
我的问题是1、怎么判断是那个客户端和服务端建立了连接?
2、服务端要发送给第一个客户端,那怎么判断是发送给了第一个客户端?
是不是每个客户端都要建立一个什么标志,然后先发送这个标志呢?
解决方案 »
- ADO+DataGrid进行数据查询问题?请大家看一下?
- 如何在多个chtmlview中把session,cookie单独设定?
- 求高手诊断关于头文件stdafx.h ,十分急!
- 求救,请高手来解决控件下载运行后IE崩溃的问题。(分不够,可以再开贴啊,决不吝啬!)
- 有关列表框的使用问题
- 菜鸟问题!
- 高分求《Windows游戏编程大师技巧》pdf版?
- 熟悉Delphi和VC的高手请关注这个问题(200分相送)!
- 求教:我一个activex控件要处理PreTranslateMessage,这个控件如果是插入在一个dialog上就正常,如果在一个view中用create创建控件的PreT
- 开发时用了VC++和WinPcap,版权怎么处理?
- bad format string是什么意思?
- mfc中如何将在listbox中删除的数据显示在另一个listbox中
listen, 然后accpt的时候,socket其实已经包含了本地IP,端口,远程IP和端口
accept在参数中返回远程IP,端口accept FunctionThe accept function permits an incoming connection attempt on a socket.
SOCKET accept(
__in SOCKET s,
__out struct sockaddr* addr,
__in_out int* addrlen
);Parameters
s
A descriptor that identifies a socket that has been placed in a listening state with the listen function. The connection is actually made with the socket that is returned by accept.addr
An optional pointer to a buffer that receives the address of the connecting entity, as known to the communications layer. The exact format of the addr parameter is determined by the address family that was established when the socket from the sockaddr structure was created.addrlen
An optional pointer to an integer that contains the length of structure pointed to by the addr parameter.
那参数addr 是用来保存远程Ip和port的,accept成功之后就可以在addr中得到远程的IP,PORT,是不是这样?
stcpactive = accept( stcp, (struct sockaddr*)&sin1, (int*)&size );
cnt = recv( stcpactive, (char*)&channelID+i, 4-i, 0 );
没有这样用吧
cnt = recv( sin1, (char*)&channelID+i, 4-i, 0 );
socket和sockaddr不同TCP/IP中sockaddr是如下结构
struct sockaddr_in {
short sin_family;
u_short sin_port;
struct in_addr sin_addr;
char sin_zero[8];
};然后使用以下方法将,sin_addr转为字符串
char* FAR inet_ntoa(
__in struct in_addr in
);
这样就可以,socket只是个抽象的概念,sockaddr里才存放真正的有用信息.