Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用TCP/IP协议的c语言服务器客户端应用程序_C_Windows_Ubuntu_Server_Client - Fatal编程技术网

使用TCP/IP协议的c语言服务器客户端应用程序

使用TCP/IP协议的c语言服务器客户端应用程序,c,windows,ubuntu,server,client,C,Windows,Ubuntu,Server,Client,您好,我正在两个不同的操作系统之间开发服务器客户端 系统。我在Ubuntu 14.04上执行服务器,在Windows上执行客户端 /*TCP/IP协议上的简单服务器代码*/ #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #定义长度512 无效错误(常量字符*消息) { 佩罗尔(味精); 出口(1); } int main(int argc,char*argv[]) { int sockfd,newsockfd,portno;//为套接字和端口声明

您好,我正在两个不同的操作系统之间开发服务器客户端 系统。我在Ubuntu 14.04上执行服务器,在Windows上执行客户端

/*TCP/IP协议上的简单服务器代码*/
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#定义长度512
无效错误(常量字符*消息)
{
佩罗尔(味精);
出口(1);
}
int main(int argc,char*argv[])
{
int sockfd,newsockfd,portno;//为套接字和端口声明变量
socklen\u t clilen;//客户端地址和端口号
字符缓冲区[长度];//消息缓冲区
serv_addr中的struct sockaddr_,cli_addr;//服务器和客户端地址的结构
int n;//检查侦听、接受、读取和写入过程是否完成
FILE*fileptr;//文件指针
int-datasize;
/*检查是否提供了端口号*/
如果(argc<2){
fprintf(stderr,“错误,未提供端口\n”);
出口(1);
}
/*创建套接字*/
sockfd=套接字(AF_INET,SOCK_STREAM,0);
if(sockfd<0)
错误(“打开套接字时出错”);
bzero((char*)&serv_addr,sizeof(serv_addr));//清除服务器地址的内存
portno=atoi(argv[1]);//将中的portno从ASCII转换为整数
/*服务器地址和所有其他详细信息*/
serv_addr.sin_family=AF_INET;
serv_addr.sin_addr.s_addr=INADDR_ANY;
serv_addr.sin_port=htons(端口号);
/*绑定套接字*/
如果(绑定(sockfd,(结构sockaddr*)和服务地址,
sizeof(服务地址))<0)
错误(“绑定错误”);
/*监听套接字并等待用户(最多5个)*/
听(sockfd,5);
clilen=sizeof(cli_addr);//客户端地址的大小
/*接受用户*/
newsockfd=accept(sockfd,(struct sockaddr*)&cli\u addr,&clilen);
if(newsockfd<0)
错误(“接受错误”);
/*文件操作*/
char*fs_name=“/home/ankur/Desktop/RTSIM_Dump.csv”;
fileptr=fopen(fs_name,“r”);//打开文件
/*对套接字的读写操作*/
bzero(缓冲区,长度);
而((datasize=fread(buffer,sizeof(char),length,fileptr))>0)
{
if(发送(newsockfd、缓冲区、数据大小、0)ai_next){
//创建用于连接到服务器的套接字
连接插座=插座(ptr->ai_系列,ptr->ai_插座类型,
ptr->ai_协议);
if(ConnectSocket==无效的_套接字){
printf(“套接字失败,错误:%ld\n”,WSAGetLastError());
WSACleanup();
返回1;
}
//连接到服务器。
iResult=connect(ConnectSocket,ptr->ai_addr,(int)ptr->ai_addrlen);
if(iResult==SOCKET\u错误){
闭合插座(连接插座);
ConnectSocket=无效的_套接字;
继续;
}
打破
}
freeaddrinfo(结果);
if(ConnectSocket==无效的_套接字){
printf(“无法连接到服务器!\n”);
WSACleanup();
返回1;
}
//从服务器接收文件并保存它。
fileptr=fopen(“/Desktop/RTSIM_Dump.csv”,“w”);
if(fileptr==NULL)
{
printf(“错误:创建/打开文件”);
出口(1);
}
int write_sz;
memset(recvbuf,0,默认值);
而((recvbuflen=recv(ConnectSocket,recvbuf,DEFAULT_BUFLEN,0))>0)
{
write_sz=fwrite(recvbuf、sizeof(char)、recvbuflen、fileptr);
如果(写入_sz
------------------------------------------------------------------------------我在服务器(Ubuntu)上收到错误104&在服务器上创建/打开文件错误 窗户

提前感谢

我检查了Ubuntu上的服务器客户端,它工作得很好,但当我 在Windows客户端上尝试过。在执行过程中出现错误

这是不正确的windows路径。更合适的路径是
“\Desktop\RTSIM\u Dump.csv”
。请注意,路径中的目录必须存在并具有适当的权限

服务器中的错误104是从哪里得到的

这是不正确的windows路径。更合适的路径是
“\Desktop\RTSIM\u Dump.csv”
。请注意,路径中的目录必须存在并具有适当的权限


服务器上哪里有错误104?

你的windows计算机上真的有
/Desktop
目录吗?我犯了一个愚蠢的错误。但在服务器端它仍然给出errno 104你的windows计算机上真的有
/Desktop
目录吗?我犯了一个愚蠢的错误。但在服务器端它仍然给出errno 104(由对等方重置连接)最有可能出现在
发送
(来自连接的客户端,但在接收任何内容之前,文件错误会立即消失)。是的,在服务器中,我收到错误号104。我按照建议对客户端代码进行了更改。它可以工作,但现在客户端只接收1.9KB。我的文件包含的数据超过了它。104(由对等方重置连接)最有可能出现在
发送
(来自连接的客户端,但在接收任何内容之前,文件错误会立即消失)。是的,在服务器中,我收到错误号104。我按照建议对客户端代码进行了更改。它可以工作,但现在客户端只接收1.9 KB。我的文件包含的数据比它多。
/* Simple Server code on TCP/IP protocol */

#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/wait.h>
#include <sys/socket.h>
#include <signal.h>
#include <ctype.h>          
#include <arpa/inet.h>
#include <netdb.h>

#define length 512
void error(const char *msg)
{
    perror(msg);
    exit(1);
}

int main(int argc, char *argv[])
{
     int sockfd, newsockfd, portno; //Declare variable for Socket and port
     socklen_t clilen;  //Client address and port no
     char buffer[length];   //Buffer for message

     struct sockaddr_in serv_addr, cli_addr;    //Srtructure for server and Client address
     int n; //Check whether listen,accept,read,write process done
     FILE *fileptr; //File pointer
     int datasize;

    /* Check Portno. provided or not */
     if (argc < 2) {
         fprintf(stderr,"ERROR, no port provided\n");
         exit(1);
     }

    /*Create socket*/
     sockfd = socket(AF_INET, SOCK_STREAM, 0);
     if (sockfd < 0) 
        error("ERROR opening socket");

     bzero((char *) &serv_addr, sizeof(serv_addr)); //Clear memory for Server address 
     portno = atoi(argv[1]);    //Convert portno in to Integer from ASCII

    /*Server address and all other details */
     serv_addr.sin_family = AF_INET;
     serv_addr.sin_addr.s_addr = INADDR_ANY;
     serv_addr.sin_port = htons(portno);

    /*Bind socket*/
     if (bind(sockfd, (struct sockaddr *) &serv_addr,
              sizeof(serv_addr)) < 0) 
              error("ERROR on binding");

    /*Listening to socket and waiting for users(max.5) */
     listen(sockfd,5);

     clilen = sizeof(cli_addr); //Size of Client address

    /*Accept users*/
     newsockfd= accept(sockfd,(struct sockaddr *) &cli_addr,&clilen);
     if (newsockfd< 0) 
          error("ERROR on accept");


    /*File operations */
    char* fs_name = "/home/ankur/Desktop/RTSIM_Dump.csv";   
     fileptr=fopen(fs_name,"r");    //Open file

    /*Write and Read operation to socket*/

    bzero(buffer,length);
    while((datasize = fread(buffer,sizeof(char),length,fileptr))>0)
    {
        if(send(newsockfd,buffer,datasize,0)<0)
        {
                fprintf(stderr, "ERROR: Failed to send file :%s (errno = %d)\n",fs_name,errno);
            break;
        }
        bzero(buffer,length);
    }


     fclose(fileptr);   //Close file
     close(newsockfd);  //Close to accept client
     close(sockfd); //close socket


     return 0; 
}


//Client code:
------------------------------------------------------------------------------#define WIN32_LEAN_AND_MEAN

#define _WIN32_WINNT 0x0501

#include <windows.h>
#include <winsock2.h>
#include <ws2tcpip.h>
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>


// Need to link with Ws2_32.lib, Mswsock.lib, and Advapi32.lib
#pragma comment (lib, "Ws2_32.lib")
#pragma comment (lib, "Mswsock.lib")
#pragma comment (lib, "AdvApi32.lib")


#define DEFAULT_BUFLEN 512
#define DEFAULT_PORT "2222"

int __cdecl main(int argc, char **argv)
{
    WSADATA wsaData;
    SOCKET ConnectSocket = INVALID_SOCKET;
    struct addrinfo *result = NULL,
                    *ptr = NULL,
                    hints;
    char sendbuf[DEFAULT_BUFLEN];
    char recvbuf[DEFAULT_BUFLEN];
    int iResult;
    int recvbuflen;
    FILE *fileptr;

    // Validate the parameters
    if (argc != 2) {
        printf("usage: %s server-name\n", argv[0]);
        return 1;
    }

    // Initialize Winsock
    iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
    if (iResult != 0) {
        printf("WSAStartup failed with error: %d\n", iResult);
        return 1;
    }

    ZeroMemory( &hints, sizeof(hints) );
    hints.ai_family = AF_UNSPEC;
    hints.ai_socktype = SOCK_STREAM;
    hints.ai_protocol = IPPROTO_TCP;

    // Resolve the server address and port
    iResult = getaddrinfo(argv[1], DEFAULT_PORT, &hints, &result);
    if ( iResult != 0 ) {
        printf("getaddrinfo failed with error: %d\n", iResult);
        WSACleanup();
        return 1;
    }

    // Attempt to connect to an address until one succeeds
    for(ptr=result; ptr != NULL ;ptr=ptr->ai_next) {

        // Create a SOCKET for connecting to server
        ConnectSocket = socket(ptr->ai_family, ptr->ai_socktype,
            ptr->ai_protocol);
        if (ConnectSocket == INVALID_SOCKET) {
            printf("socket failed with error: %ld\n", WSAGetLastError());
            WSACleanup();
            return 1;
        }

        // Connect to server.
        iResult = connect( ConnectSocket, ptr->ai_addr, (int)ptr->ai_addrlen);
        if (iResult == SOCKET_ERROR) {
            closesocket(ConnectSocket);
            ConnectSocket = INVALID_SOCKET;
            continue;
        }
        break;
    }

    freeaddrinfo(result);

    if (ConnectSocket == INVALID_SOCKET) {
        printf("Unable to connect to server!\n");
        WSACleanup();
        return 1;
    }


//Receive file from Server and save it.

        fileptr = fopen("/Desktop/RTSIM_Dump.csv","w");
        if (fileptr == NULL)
        {
            printf("ERROR:Create/Open file");
            exit(1);
        }
        int write_sz;
        memset(recvbuf,0,DEFAULT_BUFLEN);
        while((recvbuflen = recv(ConnectSocket,recvbuf,DEFAULT_BUFLEN,0))>0)
        {
            write_sz = fwrite(recvbuf,sizeof(char),recvbuflen,fileptr);
            if(write_sz < recvbuflen)
            {
                printf("File write failed.\n");
            }
                memset(recvbuf,0,DEFAULT_BUFLEN);
                if(recvbuflen == 0 || recvbuflen != 512)
                {
                    break;
                }
        }
        if(recvbuflen < 0)
        {
                printf("recv() timed out.\n");
        }

    // cleanup
    fclose(fileptr);
    closesocket(ConnectSocket);
    WSACleanup();

    return 0;
} 
fileptr = fopen("/Desktop/RTSIM_Dump.csv","w");