实现一个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、提供的是代码是可编译的,提供的可执行程序是可以运行并且附带简短的说明