谁能用C语言写个最简单socket通信服务端和客户端示例

谁能用C语言写个最简单socket通信服务端和客户端示例,第1张

网络的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()

具体怎么写,没有人能告诉你,因为每个系统的需求不一样。我说一下我的程序希望对你有点帮助,分为5个部分(网络通信、协议解析、数据库操作、缓存管理、事件处理),网络通信主要有接收、发送、连接、关闭连接、数据分包这5个功能(我用得是完成端口来实现的),协议解析主要有转义/还原、校验、解析/打包这5个功能,数据库我就只封装调用存储过程,缓存管理就是存储一些经常操作的数据(避免频繁操作数据库),事件处理就是根据不同的协议对象来触发相应的处理函数。

/* File: server.c */

#include <stdio.h>

#include <sys/types.h>

#include <sys/socket.h>

#include <netinet/in.h>

int main(int argc, char **argv)

{

int fd

int address_len

struct sockaddr_in address

//建立套接口

fd = socket(AF_INET, SOCK_DGRAM, 0)//SOCK_DGRAM

//绑定地址和端口

bzero(&address, sizeof(address))

address.sin_family = AF_INET

address.sin_addr.s_addr = htonl(INADDR_ANY)

address.sin_port = htons(1234)

address_len = sizeof(address)

bind(fd, (struct sockaddr *)&address, address_len)

while(1) {

struct sockaddr_in client_address

socklen_t len = sizeof(client_address)

int n

char line[80]

printf("waiting...")

fflush(stdout)

//接收数据

n = recvfrom(fd, line, 80, 0,

(struct sockaddr *)&client_address, &len)

printf("server received %d:%s", n, line)

//发送数据

sendto(fd, line, n, 0,

(struct sockaddr *)&client_address, len)

}

}

/* File: client.c */

#include <sys/types.h>

#include <sys/socket.h>

#include <netinet/in.h>

int main(int argc, char **argv)

{

int fd

struct sockaddr_in address

int address_len

char line[80] = "Client to Server string!\n"

int n

//建立套接口

fd = socket(AF_INET, SOCK_DGRAM, 0)//AF_INET和SOCK_DGRAM的组合对应UDP协议

//联接

bzero(&address, sizeof(address))

address.sin_family = AF_INET

address.sin_addr.s_addr = inet_addr("193.193.196.1")

address.sin_port = htons(1234)

address_len = sizeof(address)

//发送数据

sendto(fd, line, strlen(line)+1, 0,

(struct sockaddr *)&address, sizeof(address))

//接收数据

n = recvfrom(fd, line, 80, 0, NULL, NULL)

printf("received %d:%s", n, line)

}

仔细读一下,最好下次能自己写^_^,起码要弄懂原理


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/202008.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-02
下一篇2023-04-02

发表评论

登录后才能评论

评论列表(0条)

    保存