TCP服务器创建客户端套接字

时间:2015-11-01 04:55:58

标签: c multithreading sockets network-programming client-server

我正在尝试为服务器实现套接字编程,它也可以作为客户端使用。

我尝试这样做的方式是在运行服务器时,如果我输入命令提示参数"连接IP PORT",它将作为客户端连接到相应的地址。

它确实有效,但不能同时工作。

如果我想在此程序通过传入客户端连接之前连接到服务器,则在与客户端建立连接之前它不会响应。

这是program.c的代码:

#include "clientAPI.h"
#include "serverAPI.h"

int sfd;    //socket file descriptor
int listenv;  //if listen
struct sockaddr_in serverAddress;   //server address
int connectv;


int main(int argc, char * argv[]) { //argv[0] == server //argv[1] == port number

        char buffer[256];
        int connection;
        int csfd;
        int n;
        char a1[5], a2[5], a3[5];
        char m1[2], m2[10], m3[50];                 //command arg 1, command arg 2, arg command 3
        int * index;
        char * info;

        struct cEnQuery * ieq;

        ...

        listenv = setServer(argv[1],&serverAddress,&sfd);

        while (listenv == 0) {
            connectv = connector(&sfd);

            //while connected
            bzero(buffer,256);
            fgets(buffer,256,stdin);
            sscanf(buffer,"%s %s %50[0-9a-zA-Z .]",a1,a2,a3);

            if (strcmp(a1,"connect") == 0) {
            //cip = atoi(m2); cport = atoi(m3);
            connection = connectToServer(&csfd,a2,a3);
            if(connection == 1) {
                printf("Please enter the message: "); //command prompt requests [send file/ get file / send struct]
                bzero(buffer,256);
                fgets(buffer,255,stdin);

                //request message to server
                n = write(csfd, buffer, strlen(buffer)); //send prompt request to server to take its actions
                sscanf(buffer,"%s %s %50[0-9a-zA-Z .]",m1,m2,m3);
                if(n < 0) {
                    cerror("ERROR writing to socket");
                }
                else{
                    //connection stuff
                }
            }
        }
    }
}

clientAPI和serverAPI只是包含函数的头文件。

在听取连接时,我有什么方法可以调用clientAPI吗?

setServer()处理服务器与主机的绑定并侦听连接。

connector()接受连接并创建一个线程并处理相应的连接。

connectToServer()创建一个套接字并连接到可用的服务器。

0 个答案:

没有答案