还有请问SOCKET socket(AF_INET,SOCK_STREAM,0)
已经建立了socke为什么还要accept返回socket类型
着两个socket区别是什么
//extern "C"
//{
#include <Winsock2.h>
#include <stdio.h>
//}
int main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err; wVersionRequested =
MAKEWORD(1,1); // 高字节,低字节 // 一是加载套接字库,二是进行套接字库的版本协商,也就是确定版本,
err=WSAStartup(
wVersionRequested, /* 高字节副版本,低字节主版本 */
&wsaData /* 这是个出口地址,装在库版本的有关信息 */
);
if (err!=0)
{
return 1;
}
// 证明加载不成功,释放资源
if (LOBYTE(wsaData.wVersion)!=1 || HIBYTE(wsaData.wVersion)!=1)
{
WSACleanup();
return 2;
} //创建用于监听的套接字
SOCKET sockSrv = socket(
AF_INET, /* tcp/ip 协议 */
SOCK_STREAM, /* tcp or udp */
0 /* 自动 */
);
SOCKADDR_IN addrSrv; /* */
addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY); /* */
addrSrv.sin_family = AF_INET; /* 地址簇为ip地址 */
addrSrv.sin_port = htons(6000); /* 端口 */ //bind套接字绑定
bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)); //将套接字设为监听模式,准备接受客户请求
listen(sockSrv,5); /*
套接字描述符,等待链接
队列的最大长度 ( 如果
设为SOMAXCONN,那么下层
就给个可能的最大值 )
*/ SOCKADDR_IN addrClient;
int len=sizeof(SOCKADDR); while(1)
{
//等待客户请求到来
SOCKET sockConn=accept(
sockSrv, //套接字描述符
(SOCKADDR*)&addrClient, //客户机信息(ip && port)保存的地址
&len //地址信息的长度
); char sendBuf[100];
//发送数据
sprintf(
sendBuf, //
"welcome %s ", //
inet_ntoa(addrClient.sin_addr) //
);
send(
sockConn, //套接字
sendBuf, //发送内容缓冲区的地址
strlen(sendBuf)+1, //缓冲区的长度
0 //flag一般为0
); char recvBuf[100];
//接收数据
recv(
sockConn, //套接字
recvBuf, //接收预留的缓冲区
100, //缓冲区长度
0 //flag一般为0
);
//打印接收的数据
printf("%s\n",recvBuf);
closesocket(sockConn);
}
return 0;
}
已经建立了socke为什么还要accept返回socket类型
着两个socket区别是什么
//extern "C"
//{
#include <Winsock2.h>
#include <stdio.h>
//}
int main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err; wVersionRequested =
MAKEWORD(1,1); // 高字节,低字节 // 一是加载套接字库,二是进行套接字库的版本协商,也就是确定版本,
err=WSAStartup(
wVersionRequested, /* 高字节副版本,低字节主版本 */
&wsaData /* 这是个出口地址,装在库版本的有关信息 */
);
if (err!=0)
{
return 1;
}
// 证明加载不成功,释放资源
if (LOBYTE(wsaData.wVersion)!=1 || HIBYTE(wsaData.wVersion)!=1)
{
WSACleanup();
return 2;
} //创建用于监听的套接字
SOCKET sockSrv = socket(
AF_INET, /* tcp/ip 协议 */
SOCK_STREAM, /* tcp or udp */
0 /* 自动 */
);
SOCKADDR_IN addrSrv; /* */
addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY); /* */
addrSrv.sin_family = AF_INET; /* 地址簇为ip地址 */
addrSrv.sin_port = htons(6000); /* 端口 */ //bind套接字绑定
bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)); //将套接字设为监听模式,准备接受客户请求
listen(sockSrv,5); /*
套接字描述符,等待链接
队列的最大长度 ( 如果
设为SOMAXCONN,那么下层
就给个可能的最大值 )
*/ SOCKADDR_IN addrClient;
int len=sizeof(SOCKADDR); while(1)
{
//等待客户请求到来
SOCKET sockConn=accept(
sockSrv, //套接字描述符
(SOCKADDR*)&addrClient, //客户机信息(ip && port)保存的地址
&len //地址信息的长度
); char sendBuf[100];
//发送数据
sprintf(
sendBuf, //
"welcome %s ", //
inet_ntoa(addrClient.sin_addr) //
);
send(
sockConn, //套接字
sendBuf, //发送内容缓冲区的地址
strlen(sendBuf)+1, //缓冲区的长度
0 //flag一般为0
); char recvBuf[100];
//接收数据
recv(
sockConn, //套接字
recvBuf, //接收预留的缓冲区
100, //缓冲区长度
0 //flag一般为0
);
//打印接收的数据
printf("%s\n",recvBuf);
closesocket(sockConn);
}
return 0;
}
解决方案 »
- 请问类似QQ魔法表情或MSN传情动漫那样功能怎么实现?
- 类型转化问题
- 请教异步的ado连接的释放问题
- ★★★★这样的模型会不会死锁,或者有没有更好的方法(模型)????★★★★
- 有北京的吗?问一下冠群电脑(中国)有限公司这个公司怎么样?
- 在eVC上能否给Picture控件加上滚动条,垂直与水平滚动条,以达到当图片太大时,能够通过拉动滚动条来观看图片。
- 如何得到程序的所在的绝对路径和窗体中的控件的句柄
- RS485通信出现问题,在线等等
- vc++里有生成随机数的函数吗???怎么用??
- 关于资源的一个简单问题!
- ICSeqCompressFrameStart调用出错
- 毕设紧急求助:怎样点击一个按钮打开并显示TXT已经存在的文件 在线等
main.cpp
c:\Documents and Settings\liutong\My Documents\Visual Studio Projects\tcpSrv\main.cpp(77) : warning C4267: 'argument' : conversion from 'size_t' to 'int', possible loss of data
Linking...
main.obj : error LNK2019: unresolved external symbol __imp__closesocket@4 referenced in function _main
main.obj : error LNK2019: unresolved external symbol __imp__recv@16 referenced in function _main
main.obj : error LNK2019: unresolved external symbol __imp__send@16 referenced in function _main
main.obj : error LNK2019: unresolved external symbol __imp__inet_ntoa@4 referenced in function _main
main.obj : error LNK2019: unresolved external symbol __imp__accept@12 referenced in function _main
main.obj : error LNK2019: unresolved external symbol __imp__listen@8 referenced in function _main
main.obj : error LNK2019: unresolved external symbol __imp__bind@12 referenced in function _main
main.obj : error LNK2019: unresolved external symbol __imp__htons@4 referenced in function _main
main.obj : error LNK2019: unresolved external symbol __imp__htonl@4 referenced in function _main
main.obj : error LNK2019: unresolved external symbol __imp__socket@12 referenced in function _main
main.obj : error LNK2019: unresolved external symbol __imp__WSACleanup@0 referenced in function _main
main.obj : error LNK2019: unresolved external symbol __imp__WSAStartup@8 referenced in function _main
Debug/tcpSrv.exe : fatal error LNK1120: 12 unresolved externalsBuild log was saved at "file://c:\Documents and Settings\liutong\My Documents\Visual Studio Projects\tcpSrv\Debug\BuildLog.htm"
tcpSrv - 13 error(s), 1 warning(s)
---------------------- Done ---------------------- Build: 0 succeeded, 1 failed, 0 skipped
这就是一个winsick服务器端的例子
例如:
char s[10];sprintf(s, "%d", 123);
此时s中存放字符“123”
我还经常看到
#pragma once
之类的#pragma
这个#pragma
是什么意思啊后面可以放什么参数选项啊
同样的错误只警告一次,
其他的#pragma,可以上网去搜索,满多的资料!