还有请问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;
}

解决方案 »

  1.   

    错误代码为:加了extern "C"或是不假都不行------ Build started: Project: tcpSrv, Configuration: Debug Win32 ------Compiling...
    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
      

  2.   

    accept返回的是客户端的socket,以后服务端向客户端发送数据就使用这个socket
      

  3.   

    LNK2019经常是调用约定设置得不同造成的。
      

  4.   

    那怎么样调整呢?
    这就是一个winsick服务器端的例子
      

  5.   

    还有请问sprintf()函数的三个参数是什么意思啊?谢谢
      

  6.   

    在include语句下面添加下面一行:#pragma comment(lib, "ws2_32.lib")sprintf的第一个参数是接收输出的字符串缓冲区,第2个参数及之后同printf
    例如:
    char s[10];sprintf(s, "%d", 123);
    此时s中存放字符“123”
      

  7.   

    谢谢,正解,不过能解释下这个预处理什么意思么
    我还经常看到
    #pragma once
    之类的#pragma
    这个#pragma
    是什么意思啊后面可以放什么参数选项啊
      

  8.   

    #pragma once
    同样的错误只警告一次,
    其他的#pragma,可以上网去搜索,满多的资料!
      

  9.   

    #pragma comment(lib, "ws2_32.lib"):连接的时候包含ws2_32.lib