QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 710|回复: 3

关于linux网络编程一系列怪问题

[复制链接]
发表于 2004-10-15 06:36:40 | 显示全部楼层 |阅读模式
/* tcp_client.c */
#include <stdio.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <string.h>
int main(int argc, char *argv[])
{
    int socketfd;
    struct sockaddr_in serveraddr;
    char sendmessage[1500], receivemessage[1500];

    socketfd = socket(AF_INET, SOCK_STREAM, 0);

    memset(&serveraddr, 0, sizeof(serveraddr));
    serveraddr.sin_family = AF_INET;
    serveraddr.sin_port = htons(800);
    serveraddr.sin_addr.s_addr=inet_addr(argv[1]);

    if(connect(socketfd, (struct sockaddr *)&serveraddr, sizeof(serveraddr)) < 0)
        printf("connect error");

    while(fgets(sendmessage, 1500, stdin) != NULL)
    {
        write(socketfd, sendmessage, strlen(sendmessage));
        while(read(socketfd, receivemessage, 1500) > 0)
        {
            fputs(receivemessage, stdout);
        }
    }
}

这是个回射tcp客户-服务器程序的客户端,不知是程序本生有问题那还是操作系统有问题还是校园网的原因,
gcc -o tcp_client tcp_client.c之后,./tcp_client 127.0.0.1时,就算服务器程序未开,connect()函数也正常返回,不显示error.可800端口根本没开着的程序阿!
但是就算服务器程序开着,用ip地址还是会出现connect error,
我超级郁闷了,这个是什么怪事阿,大虾急救阿,我已经郁闷好久了!!!

/* tcp_server.c */
#include <stdio.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <string.h>
int main(int argc, char *argv[])
{
    int listenfd, connectfd;
    struct sockaddr_in serveraddr, clientaddr;
    socklen_t client;
    ssize_t n;
    char message[1500];

    listenfd = socket(AF_INET, SOCK_STREAM, 0);

    memset(&serveraddr, 0, sizeof(serveraddr));
    serveraddr.sin_family = AF_INET;
    serveraddr.sin_addr.s_addr = htonl(INADDR_ANY);
    serveraddr.sin_port = htons(800);
    bind(listenfd, (struct sockaddr *)&serveraddr, sizeof(serveraddr));

    listen(listenfd, 10);

    for(; ;)
    {
        client = sizeof(clientaddr);
        connectfd = accept(listenfd, (struct sockaddr *)&clientaddr, &client);
        write(connectfd, "hello", 5);
        while((n = read(connectfd, message, 1500)) > 0)
        {
            write(connectfd, message, n);
        }
    }
}
发表于 2004-10-15 13:53:41 | 显示全部楼层
用1025以上的端口试试。
回复

使用道具 举报

发表于 2004-11-2 09:33:56 | 显示全部楼层
1024以内的端口是需要root权限的。
回复

使用道具 举报

发表于 2004-11-2 10:20:31 | 显示全部楼层
楼上的咋注册了这么久才4篇,有网络编程方面的专长就要常来啊   
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-7 05:33 , Processed in 0.058239 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表