当前位置:首页 » 编程语言 » c语言客户端与服务器

c语言客户端与服务器

发布时间: 2022-08-11 07:54:20

Ⅰ Linux c语言 C/S程序,客户端发送的数据和服务器端接收到的数据不一样,求解

估计你是用的tcp
socket,导致“videlord”网友说的情况:对于tcp
socket,send与recv不是对等的,recv时只要缓冲有数据就会收上来。简单说就是你send
4次,比如分别为10
10
10
10字节,对端可以一次recv到这40字节数据,也可以recv
40次、每次1字节。
解决办法有两种:
1.
改用udp
socket,send/recv自然对等了
2.
继续用tcp
socket,自己进行数据分段:比如自行约定在数据前约定4个字节用于描述数据长度,这样发送时,send
4+33字节,send
4+35字节;接收时,先获取描述长度的4字节获得长度,再按照长度
接收数据
(可能需要多次recv凑齐指定长度)。

Ⅱ (用C语言实现)客户端如何通过socket调用服务器函数

socket是用来和服务器通信的,无法直接调用服务器函数。

要实现功能,可以和服务器约定协议。
比如,在与服务器通信连接后,发送一系列标识符,最后加一个函数id,表示要求服务器调用约定的某一个函数。
服务器在接收到后,执行对应的函数,将结果返回给客户端即可。

Ⅲ C语言socket编程怎么实现2个客户端之间通信

两个单独的客户端是没法通信的,必须经过服务器。
服务器和客户端连接过程如下:
客户端:
socket-->connect-->read/write
服务器:
socket-->bind-->listen-->accept-->write/read
若要通讯必须要有服务器,只有在connect和accept建立好连接之后才能真正的通信。
如果你是问编程的流程或者上述函数的意义和用法网络上一大堆。

Ⅳ C语言,如何将一个客户端不断发送过来的数据(包含两类数据),通过服务器分别发送给其他两个客户端

听说不开刀的?

Ⅳ C语言客户端与服务器

这是WINDOWS的连网代码吧?
WSDstartup初始
socket创建套节字
bing监听
sendto发送
sockaddr_in IP结构体

Ⅵ (用C语言实现)客户端如何通过socket调用服务器函数

socket是用来和服务器通信的,无法直接调用服务器函数。
要实现功能,可以和服务器约定协议。
比如,在与服务器通信连接后,发送一系列标识符,最后加一个函数id,表示要求服务器调用约定的某一个函数。
服务器在接收到后,执行对应的函数,将结果返回给客户端即可。

Ⅶ C语言中,客户端如何对多个服务器操作的,详解~!!

connect有个参数是struct sockaddr 所以可以用多个socket连接多个服务端。然后通过不同的socket给不同的服务器发送数据。还有你是不能直接操作服务器的。服务器只是根据你发送过去的特定数据进行响应。
一样的,弄个线程然后循环一直accept,判断:当有客户端链接的时候,就保存下来链接的这个客户端的socket,然后开个线程对这个socket发送数据就可以了。因为是循环accept就会有很多客户端链接过来。

Ⅷ 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);

Ⅸ C语言socket编程要怎么实现服务器可以发消息给客户端

先要理解socket是什么?
简单的说socket是一个全双工的通信通道,
即使用TCP或者UDP通信时均可以在发送消息的同时接受消息,
它不区分是否是服务器。
根据这个概念你的问题就很好回答。
》当客户端与服务器连接后。有什么方法使服务器可以随时随地发消息给客户端?
》我现在只能。客户端发个消息给服务器。服务器才能发个消息给客户端。也就是说客户端不发消息。服务器就没法发消息给客户端。
》求大牛给个思路。当连接后。客户端与服务器双方可以随时随地通信!
使用多线程,一个维持接受逻辑,一个维持送信逻辑,即可完成同时接受及发送。
客户端及服务器端均做上述设置。
而你的做法是在一个线程中执行接受与送信,因此只能按照顺序逻辑完成接收与送信。
关键点是多线程。

Ⅹ C语言编程socket有个客服端和服务端怎么建文件并且运行

网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。
下面用Socket实现一个windows下的c语言socket通信例子,这里我们客户端传递一个字符串,服务器端进行接收。

【服务器端】
#include "stdafx.h"
#include <stdio.h>
#include <winsock2.h>
#include <winsock2.h>
#define SERVER_PORT 5208 //侦听端口
void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int ret, nLeft, length;
SOCKET sListen, sServer; //侦听套接字,连接套接字
struct sockaddr_in saServer, saClient; //地址信息
char *ptr;//用于遍历信息的指针
//WinSock初始化
wVersionRequested=MAKEWORD(2, 2); //希望使用的WinSock DLL 的版本
ret=WSAStartup(wVersionRequested, &wsaData);
if(ret!=0)
{
printf("WSAStartup() failed!\n");
return;
}
//创建Socket,使用TCP协议
sListen=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sListen == INVALID_SOCKET)
{
WSACleanup();
printf("socket() faild!\n");
return;
}
//构建本地地址信息
saServer.sin_family = AF_INET; //地址家族
saServer.sin_port = htons(SERVER_PORT); //注意转化为网络字节序
saServer.sin_addr.S_un.S_addr = htonl(INADDR_ANY); //使用INADDR_ANY 指示任意地址

//绑定
ret = bind(sListen, (struct sockaddr *)&saServer, sizeof(saServer));
if (ret == SOCKET_ERROR)
{
printf("bind() faild! code:%d\n", WSAGetLastError());
closesocket(sListen); //关闭套接字
WSACleanup();
return;
}

//侦听连接请求
ret = listen(sListen, 5);
if (ret == SOCKET_ERROR)
{
printf("listen() faild! code:%d\n", WSAGetLastError());
closesocket(sListen); //关闭套接字
return;
}

printf("Waiting for client connecting!\n");
printf("Tips: Ctrl+c to quit!\n");
//阻塞等待接受客户端连接
while(1)//循环监听客户端,永远不停止,所以,在本项目中,我们没有心跳包。
{
length = sizeof(saClient);
sServer = accept(sListen, (struct sockaddr *)&saClient, &length);
if (sServer == INVALID_SOCKET)
{
printf("accept() faild! code:%d\n", WSAGetLastError());
closesocket(sListen); //关闭套接字
WSACleanup();
return;
}
char receiveMessage[5000];
nLeft = sizeof(receiveMessage);
ptr = (char *)&receiveMessage;
while(nLeft>0)
{
//接收数据
ret = recv(sServer, ptr, 5000, 0);
if (ret == SOCKET_ERROR)
{
printf("recv() failed!\n");
return;
}
if (ret == 0) //客户端已经关闭连接
{
printf("Client has closed the connection\n");
break;
}
nLeft -= ret;
ptr += ret;
}
printf("receive message:%s\n", receiveMessage);//打印我们接收到的消息。

}
// closesocket(sListen);
// closesocket(sServer);
// WSACleanup();
}
【客户端】
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <winsock2.h>
#define SERVER_PORT 5208 //侦听端口
void main()

热点内容
php显示数据库中图片 发布:2025-01-21 00:44:34 浏览:145
如何在服务器中找文件 发布:2025-01-21 00:38:50 浏览:910
Cmdpython命令 发布:2025-01-21 00:30:38 浏览:757
mac常用解压 发布:2025-01-21 00:01:47 浏览:691
linuxcpu使用 发布:2025-01-21 00:00:59 浏览:849
成套供应配电柜有哪些配置 发布:2025-01-21 00:00:52 浏览:120
GO编译器PDF 发布:2025-01-21 00:00:52 浏览:703
osu上传成绩 发布:2025-01-20 23:59:57 浏览:641
了解sql 发布:2025-01-20 23:58:39 浏览:655
安卓双击锁屏如何设置 发布:2025-01-20 23:56:52 浏览:201