| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3476 人关注过本帖
标题:socket新手 求助!
只看楼主 加入收藏
fastkb
Rank: 1
等 级:新手上路
帖 子:3
专家分:2
注 册:2014-5-6
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:2 
socket新手 求助!
刚在学unix网络编程 connect能够连接 read老是返回-1是什么鬼。
客户端代码:
#include <stdio.h>
#include <io.h>
#include <winsock2.h>

int main()
{
    int sockfd, n, ret;

    WORD ver;
WSADATA data;
ver = MAKEWORD( 2, 2 );
ret = WSAStartup( ver, &data );

    char recvline[100], addr[] = "127.0.0.1";

    struct sockaddr_in servaddr;

    if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
    {
        printf("sock open error!\n");
        return 0;
    }

    memset(&servaddr, 0, sizeof(servaddr));

    servaddr.sin_family = AF_INET;
    servaddr.sin_port = htons(1111);

    servaddr.sin_addr.S_un.S_addr = inet_addr(addr);

    if((ret = connect(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr))) < 0)
    {

        ret = WSAGetLastError();
        printf("connect error!");
        return 0;
    }

    while((n = read(sockfd, recvline, 100)) > 0)
    {
        recvline[n] = 0;
        printf(recvline);
    }

    if(n < 0)
    perror("read");

    getchar();

    return 0;
}
服务端:
#include <stdio.h>
#include <io.h>
#include <winsock2.h>
#include <time.h>

int main()
{
    int listfd, ret, connfd;
    time_t ticks;
    WORD ver;
WSADATA data;
ver = MAKEWORD( 2, 2 );
ret = WSAStartup( ver, &data );

    char sendline[100];

    struct sockaddr_in listaddr;

if((listfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
{
    printf("socket open error!");
    return 0;
}

memset(&listaddr, 0, sizeof(listaddr));

listaddr.sin_family = AF_INET;
listaddr.sin_port = htons(1111);
listaddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);

bind(listfd, (struct sockaddr *)&listaddr, sizeof(listaddr));

listen(listfd, 5);

for( ; ; )
{
    connfd = accept(listfd, (struct sockaddr *)NULL, NULL);

    ticks = time(NULL);

    snprintf(sendline, sizeof(sendline), "%.24s\r\n", ctime(&ticks));

    write(connfd, sendline, strlen(sendline));

    close(connfd);
}

return 0;
}


搜索更多相关主题的帖子: 网络编程 include return 客户端 
2016-05-11 21:09
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:20 
首先,对于每个函数的调用,你得观察其返回值,以确定其有没有调用成功。尤其是你服务器端的bind函数
其次,winsock的发送/接收/关闭是send/recv/closesocket吧,不是write/read/close吧
2016-05-12 09:10
fastkb
Rank: 1
等 级:新手上路
帖 子:3
专家分:2
注 册:2014-5-6
收藏
得分:0 
非常感谢 看来要把书上的函数换一下才行了。
2016-05-12 13:55
快速回复:socket新手 求助!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.050944 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved