作业--day31

TCP

server.c

c 复制代码
#include <myhead.h>

#define PORT 8888
#define IP "192.168.0.102"

int main(int argc, const char *argv[])
{
	int sfd = socket(AF_INET, SOCK_STREAM, 0);
	if(sfd == -1){
		perror("socket error");
		return -1;
	}

	int reuse = -1;
	if(setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) == -1){
		perror("setsockopt error");
		return -1;
	}

	struct sockaddr_in sin;
	sin.sin_family = AF_INET;
	sin.sin_port = htons(PORT);
	sin.sin_addr.s_addr = inet_addr(IP);
	if(bind(sfd, (struct sockaddr *)&sin, sizeof(sin)) == -1){
		perror("bind error");
		return -1;
	}

	if(listen(sfd, 128) == -1){
		perror("listen error");
		return -1;
	}

	struct sockaddr_in cin;
	socklen_t socklen = sizeof(cin);
	int newfd = accept(sfd, (struct sockaddr *)&cin, &socklen);
	if(newfd == -1){
		perror("accept error");
		return -1;
	}

	char buf[128];
	while(1){
		bzero(buf, sizeof(buf));
		int res = recv(newfd, buf, sizeof(buf), 0);
		if(res == 0){
			puts("客户端已下线");
			break;
		}
		printf("[%s: %d] %s\n", inet_ntoa(cin.sin_addr), ntohs(cin.sin_port), buf);
		
		strcat(buf, "*_*");
		send(newfd, buf, sizeof(buf), 0);
		puts("发送成功");
	}

	close(newfd);
	close(sfd);

	return 0;
}

client.c

c 复制代码
#include <myhead.h>

#define SPORT 8888
#define SIP "192.168.0.102"

#define CPORT 9999

int main(int argc, const char *argv[])
{
	int cfd = socket(AF_INET, SOCK_STREAM, 0);
	if(cfd == -1){
		perror("socket error");
		return -1;
	}

	int reuse = -1;
	if(setsockopt(cfd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) == -1){
		perror("setsockopt error");
		return -1;
	}

	struct sockaddr_in cin;
	cin.sin_family = AF_INET;
	cin.sin_port = htons(CPORT);
	cin.sin_addr.s_addr = inet_addr(SIP);
	if(bind(cfd, (struct sockaddr *)&cin, sizeof(cin)) == -1){
		perror("bind error");
		return -1;
	}

	struct sockaddr_in sin;
	sin.sin_family = AF_INET;
	sin.sin_port = htons(SPORT);
	sin.sin_addr.s_addr = inet_addr(SIP);
	if(connect(cfd, (struct sockaddr *)&sin, sizeof(sin)) == -1){
		perror("connect error");
		return -1;
	}

	char sbuf[128] = "hello";
	char rbuf[128];
	while(1){
		send(cfd, sbuf, sizeof(sbuf), 0);
		bzero(rbuf, sizeof(rbuf));
		recv(cfd, rbuf, sizeof(rbuf), 0);
		printf("[%s: %d] %s\n", inet_ntoa(sin.sin_addr), ntohs(sin.sin_port), rbuf);
		sleep(1);
	}

	close(cfd);
	return 0;
}

UDP

server.c

c 复制代码
#include <myhead.h>

#define PORT 8888
#define IP "192.168.0.102"

int main(int argc, const char *argv[])
{
	int sfd = socket(AF_INET, SOCK_DGRAM, 0);
	if(sfd == -1){
		perror("socket error");
		return -1;
	}

	int reuse = -1;
	if(setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) == -1){
		perror("setsockopt error");
		return -1;
	}

	struct sockaddr_in sin;
	sin.sin_family = AF_INET;
	sin.sin_port = htons(PORT);
	sin.sin_addr.s_addr = inet_addr(IP);
	if(bind(sfd, (struct sockaddr *)&sin, sizeof(sin)) == -1){
		perror("bind error");
		return -1;
	}

	struct sockaddr_in cin;
	socklen_t socklen = sizeof(cin);

	char buf[128];
	while(1){
		bzero(buf, sizeof(buf));
		recvfrom(sfd, buf, sizeof(buf), 0, (struct sockaddr *)&cin, &socklen);
		printf("[%s: %d] %s\n", inet_ntoa(cin.sin_addr), ntohs(cin.sin_port), buf);
		strcat(buf, "*_*");
		sendto(sfd, buf, sizeof(buf), 0, (struct sockaddr *)&cin, socklen);
	}
	close(sfd);
	return 0;
}

client.c

c 复制代码
#include <myhead.h>

#define PORT 8888
#define IP "192.168.0.102"

int main(int argc, const char *argv[])
{
	int cfd = socket(AF_INET, SOCK_DGRAM, 0);
	if(cfd == -1){
		perror("socket error");
		return -1;
	}

	int reuse = -1;
	if(setsockopt(cfd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) == -1){
		perror("setsockopt error");
		return -1;
	}

	struct sockaddr_in sin;
	sin.sin_family = AF_INET;
	sin.sin_port = htons(PORT);
	sin.sin_addr.s_addr = inet_addr(IP);
	socklen_t socklen = sizeof(sin);
	if(connect(cfd, (struct sockaddr *)&sin, sizeof(sin)) == -1){
		perror("connect error");
		return -1;
	}

	char buf[128] = "hello";
	while(1){
		sendto(cfd, buf, sizeof(buf), 0, (struct sockaddr *)&sin, socklen);
		recvfrom(cfd, buf, sizeof(buf), 0, NULL, NULL);
		printf("[%s: %d] %s\n", inet_ntoa(sin.sin_addr), ntohs(sin.sin_port), buf);
		sleep(1);
	}
	close(cfd);
	return 0;
}

思维导图

相关推荐
超级小星星17 小时前
C 语言结构体内存对齐深度解析:从概念到实战
c语言·开发语言
笨笨饿17 小时前
74_SysTick滴答定时器中断
c语言·开发语言·人工智能·单片机·嵌入式硬件·算法·学习方法
科芯创展17 小时前
XZ4058B/C,20V,外置MOS,8.4V/8.7V开关充电芯片 宽范围电源电压:8.9V~20V-(电池充电电压:8.4V/8.7V)
c语言·开发语言
Aurorar0rua18 小时前
CS50 x 2024 Notes C -11
c语言·开发语言·学习方法
Dlrb121118 小时前
C语言-指针
c语言·开发语言
12.=0.20 小时前
【stm32_9.2】FreeRTOS的任务管理:任务策略,调度器启用,任务创建、删除、挂起、恢复
c语言·stm32·单片机·嵌入式硬件
谙弆悕博士21 小时前
【附C源码】二叉搜索树的C语言实现
c语言·开发语言·数据结构·算法·二叉树·项目实战·数据结构与算法
开发者联盟league1 天前
在cursor中配置c/c++开发环境
c语言·开发语言·c++
『昊纸』℃1 天前
C语言简介
c语言·操作系统·编程语言·应用领域·历史发展
刃神太酷啦1 天前
《网络基础全链路深度解析:从Socket编程到HTTPS与TCP/UDP内核机制》----《Hello Linux!》(25)
linux·运维·c语言·网络·c++·tcp/ip·https