Socket套接字利用tcp进行客户端与服务器端进行连接,服务器端收到信息进行创建链表,打印链表内容问题

实现一个socket通信服务端(server)和(client),要求:

Name

ID

Score

A

01234

98

B

01237

97

C

01236

65

                                                                题目二

1 客户端:输入题目2中的三条记录,形成单向表,将链表中的数据(A,B,C)从客户端发送给服务端

2 服务端:接收数据并将三条记录存储为单向链表,打印链表中的三条记录。

//sever.c
#include <stdio.h>//所需要包含的头文件
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
#include <stdlib.h>
struct mess//所需要的结构体信息
{
	char name[100];
	int id;
	int score;
};
typedef struct ListNode //链表专属结构体
{
	struct mess message;
	struct ListNode *next;
}list;
list *CreateEmptyList()//创建空链表
{
	list *p = malloc(sizeof(list));//对信息进行初始化
	memset(p->message.name, '\0', sizeof(p->message.name));
	p->message.score = 0;
	p->message.id = 0;
	p->next = NULL;
	return p;
}
void insertList(list *p, struct mess *m)//链表节点插入(头插法)
{
	list *q = malloc(sizeof(list));//创建新节点
	q->message.id = m->id;
	q->message.score = m->score;
	strcpy(q->message.name, m->name);
	q->next = p->next;
	p->next = q;
}
void printList(list *p)//打印链表内容
{
	while(p->next != NULL)
	{
		p = p->next;
		printf("name : %s, id : %d, score : %d\n", p->message.name, p->message.id, p->message.score);
	}
}
int main(int argc, const char *argv[])
{
	int i = 0, fd = socket(AF_INET, SOCK_STREAM, 0);//创建socket所需要的文件描述符
	struct sockaddr_in myaddr;//创建socket绑定结构体
	myaddr.sin_family = AF_INET;//对于socket结构体进行绑定信息
	myaddr.sin_port = htons(atoi(argv[1]));//通过在shell脚本输入端口号
	myaddr.sin_addr.s_addr = inet_addr("127.0.0.1");//分配ip地址
	int ret = bind(fd, (struct sockaddr *)&myaddr, sizeof(myaddr));//进行绑定
	listen(fd, 5);//进行监听,同时连接最大数5
	int newfd = accept(fd, NULL, NULL);//进行阻塞等待客户端连接
	printf("%d\n", newfd);//连接上后,打印客户端的文件描述符
	struct mess recvMess;//定义接收信息的结构体
	list *h = CreateEmptyList();//创建新链表
	while(i < 3)//接收三次信息
	{
		if(recv(newfd, &recvMess, sizeof(struct mess), 0) < 0)//接收信息,做异常处理
			break;
		insertList(h, &recvMess);//链表增添节点
		i++;
	}
	printList(h);//打印链表内容
	return 0;
}

//client.c
#include <stdio.h>//包含头文件信息
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdlib.h>
#include <string.h>
struct mess//创建传输内容的结构体
{
	char name[100];
	int id;
	int score;
};
int main(int argc, const char *argv[])
{
	int i, fd = socket(AF_INET, SOCK_STREAM, 0);//进行创建socket
	struct sockaddr_in youaddr;//创建socket结构体
	youaddr.sin_family = AF_INET;//进行结构体绑定
	youaddr.sin_port = htons(atoi(argv[1]));//shell脚本输入端口号
	youaddr.sin_addr.s_addr = inet_addr("127.0.0.1");//分配ip地址
	connect(fd, (struct sockaddr *)&youaddr, sizeof(youaddr));//与服务器端进行连接
	struct mess message;//创建发送信息结构体
	for(i = 0; ; i++)//可以一直发送信息给客户端
	{
		scanf("%s%d%d", message.name, &message.id, &message.score);//输入结构体信息
		send(fd, &message, sizeof(struct mess), 0);//进行发送给服务器端
	}
	return 0;
}

要求

1、需要用Linux C 写

2、提供的是代码是可编译的,提供的可执行程序是可以运行并且附带简短的说明

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值