導航:首頁 > IDC知識 > c連接socket伺服器

c連接socket伺服器

發布時間:2020-12-10 08:56:47

1、(用C語言實現)客戶端如何通過socket調用伺服器函數

socket是用來和伺服器通信的,無法直接調用伺服器函數。

要實現功能,可以和伺服器約定協議。
比如,在與伺服器通信連接後,發送一系列標識符,最後加一個函數id,表示要求伺服器調用約定的某一個函數。
伺服器在接收到後,執行對應的函數,將結果返回給客戶端即可。

2、socket 伺服器c語言 連接 mfc客戶端

雖然不知道具體什麼情況,建議檢查下arm和mfc客戶端使用的設備大端小端是否一致

3、C語言Socket伺服器怎麼給客戶端發消息

你的文件中的問題
// 會阻塞進程,直到有客戶端連接上來為止
// 既然是直到有客戶端連接上,那麼就要弄明白哪個是與客戶端連接的套接字
// sockClient就是與客戶端連接的套接字
sockClient = accept(sockServer, (SOCKADDR*)&addrClient, &len);
//接收並列印客戶端數據
recv(sockClient, recvBuf, 100, 0);
printf("%s\n", recvBuf);
// 所以此處,應該把sockServer改為sockClient
send(/*sockServer*/sockClient, sendBuf, 100, 0);

PS:伺服器客戶端通信,是要保持伺服器與客戶端的連接。
而不能這樣立即關閉,如果設置不對,立即關閉,緩沖區的數據是會丟失的。那客戶端也就不會再收到數據了。
你可以加Sleep(10000);來測是通信過程
//關閉socket
closesocket(sockClient);

4、C語言socket連接

你肯定要定一個上限啊,比如最多隻能同時給50個客戶提供連接,也就是50個線程。多餘的其它客戶連接會被阻塞直到有空餘的連接出現。其實就是所謂的「線程池」的概念,你可以搜搜這方面的內容,很多很多的。

5、C語言socket編程要怎麼實現伺服器可以發消息給客戶端?

先要理解socket是什麼?
簡單的說socket是一個全雙工的通信通道,
即使用TCP或者UDP通信時均可以在發送消息的同時接受消息,
它不區分是否是伺服器。
根據這個概念你的問題就很好回答。
》當客戶端與伺服器連接後。有什麼方法使伺服器可以隨時隨地發消息給客戶端?
》我現在只能。客戶端發個消息給伺服器。伺服器才能發個消息給客戶端。也就是說客戶端不發消息。伺服器就沒法發消息給客戶端。
》求大牛給個思路。當連接後。客戶端與伺服器雙方可以隨時隨地通信!
使用多線程,一個維持接受邏輯,一個維持送信邏輯,即可完成同時接受及發送。
客戶端及伺服器端均做上述設置。
而你的做法是在一個線程中執行接受與送信,因此只能按照順序邏輯完成接收與送信。
關鍵點是多線程。

6、C語言socket編程,伺服器和一個客戶端連接時,伺服器能正常收到信息,2個以上就出現BUG了

設置監聽socket的listen呢?
線程有自己的私有棧,即局部變數

7、Linux環境下C語言程序設計,伺服器通過socket連接後,向客戶端發送字元串「連接上了」。在伺服器上……

服務端:
先創建server_socket;
然後bind;
listen;
int clientsocket=accept(server_socket,(struct sockaddr*) &client_addr, &length);
printf("客戶端IP:%s",client_addr);
send to 客戶端.;
close(clientsocket);

客戶端:
創建client_socket;
connect;
close;

具體細節,您自內己去網容上搜搜哈

8、linux c socket 客戶端循環十次向伺服器發送數據(tcp連接),為啥只能接受第一次的?求代碼

只是做這些動作的話不需要多線程

找了下以前寫的 改成了你說的10次發送
client.c:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<errno.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>

int main(int argc,char **argv)
{
char wbuf[] = "hello server";
char rbuf[128];
int i;
int sock;
struct sockaddr_in server = {0};
struct timeval timeo;

timeo.tv_sec = 0;
timeo.tv_usec = 1000 * 1000; //
socklen_t len = sizeof(timeo);
if( argc != 2)
{
printf("usage: ./client <ipaddress>\n");
return -1;
}

sock = socket(AF_INET, SOCK_STREAM, 0);
if(sock < 0)
{
perror("Create TCP Socket");

return -1;
}

setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, &timeo, len);

server.sin_family = AF_INET;
server.sin_port = htons(30000);
inet_pton(AF_INET, argv[1], &(server.sin_addr));

int res = connect(sock, (struct sockaddr*)&server, sizeof(server));
if (res < 0)
{
if(res == EINPROGRESS)
perror("connecting stream socket time out:");
else
perror("connecting stream socket error:");
close(sock);
return -1;
}
else
{
printf("Connect Server@%s\n",argv[1]);
for(i=0;i<10;i++)
{
int wsize = send(sock,wbuf,sizeof(wbuf),0);
if(wsize<=0)
{

perror("write error:");
close(sock);
return -1;
}
printf("1111111i=%d\n",i);
while(1)
{
int rsize=recv(sock,rbuf,sizeof(rbuf),0);
if(rsize>0)
{
rbuf[rsize]='\0';
printf("recv msg from server: %s\n",rbuf);
break;
}
if(rsize<0)
{
close(sock);
perror("read error:");
return -1;
}
}

}
close(sock);
return 0;
}

}

server.c:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<errno.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>

int main(int argc, char** argv)
{
int listenfd, connfd;
struct sockaddr_in servaddr = {0};
char rbuf[128];
char wbuf[] = "hello client";
int n;

if( (listenfd = socket(AF_INET, SOCK_STREAM, 0)) == -1 )
{
perror("Create TCP Socket");
return -1;
}

servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(30000);

if( bind(listenfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) == -1)
{
perror("bind socket error:");
return -1;
}

if( listen(listenfd, 10) == -1)
{
perror("listen socket error:");
return -1;
}

printf("======waiting for client's request======\n");
while(1)
{
if( (connfd = accept(listenfd, (struct sockaddr*)NULL, NULL)) == -1)
{
perror("accept socket error:");
continue;
}
while(1)
{
n = recv(connfd, rbuf, sizeof(rbuf), 0);
if(n>0)
{
rbuf[n] = '\0';
printf("recvmsg from client: %s\n", rbuf);
n = send(connfd, wbuf, sizeof(wbuf),0);
if(n<=0)
{
perror("sned error:");
close(connfd);
break;
}
}
else if(n < 0)
{
perror("recv error:");
close(connfd);
break;
}
}
close(connfd);
}
close(listenfd);
return 0;
}

運行的時候 client
./client 你的serverip
埠我用的30000 寫死在程序里了

9、C用一個socket實現一個伺服器接收兩個客戶端的信息並保存

服務端監聽socket正常是不與任何客戶端socket進行通信的。監聽socket死循環作監聽工作,當收到一個連接之後,創建一個新的socket來與客戶端通信。這樣理論上一個服務端可以與上萬的客戶端通信。只是要記住,每個真正參與通信的socket都需要開兩個單獨的線程來進行消息的收發。

10、C語言socket編程怎麼實現2個客戶端之間通信

如果只是兩個客戶端和一個伺服器,可通過伺服器轉發即可,兩個客戶端連接到伺服器,伺服器把從A接收到的發給B,把從B接收到的發給A即可,如果要做成多個客戶端的,則要給各個客戶端分配ID,服務端好根據各個客戶端和消息要轉發送給客戶端的ID來確定消息發送對象。

與c連接socket伺服器相關的知識