网络编程-创建TCP协议服务器

int socket(int domain, int type, int protocol);

头文件: #include <sys/socket.h>

#include <netinet/in.h>

#include <netinet/ip.h>

int skt_tcpfd;

int domain;

skt_tcpfd=socket(AF_INET,SOCK_STREAM,0);

int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

头文件: #include <sys/socket.h>

#include <netinet/in.h>

#include <netinet/ip.h>

int retval;

struct sockaddr_in {

sa_family_t sin_family; /* address family: AF_INET */

in_port_t sin_port; /* port in network byte order */

struct in_addr sin_addr; /* internet address */

};

/* Internet address */

struct in_addr {

uint32_t s_addr; /* address in network byte order */

};

const struct sockaddr *address;

struct sockaddr_in addr_info;

addr_info.sin_family=AF_INET;

addr_info.sin_port=htons(6666);

addr_info.sin_addr.s_addr=htonl(INADDR_ANY);

(struct sockaddr *)&addr_info;

retval=bind(skt_tcpfd,(struct sockaddr *)&addr_info,sizeof(addrinfo));

int listen(int socket, int backlog);

头文件 #include <sys/socket.h>

int backlog最大监听数量

listen(skt_tcpfd,100)

int accept(int socket, struct sockaddr *restrict address,

socklen_t *restrict address_len);

头文件 #include <sys/socket.h>

#include <netinet/in.h>

#include <netinet/ip.h>

struct sockaddr *restrict address;

struct sockaddr_in {

sa_family_t sin_family; /* address family: AF_INET */

in_port_t sin_port; /* port in network byte order */

struct in_addr sin_addr; /* internet address */

};

/* Internet address */

struct in_addr {

uint32_t s_addr; /* address in network byte order */

};

struct sockaddr_in address;

(struct sockaddr *)&address;

socklen_t *restrict address_len;

socklen_t len=sizeof(address);

int clt_tcpfd=accept(skt_tcpfd,(struct sockaddr *)&address,&len);

int connect(int socket, const struct sockaddr *address,

socklen_t address_len);

头文件:#include <sys/socket.h>

#include <netinet/in.h>

#include <netinet/ip.h>

struct sockaddr_in {

sa_family_t sin_family; /* address family: AF_INET */

in_port_t sin_port; /* port in network byte order */

struct in_addr sin_addr; /* internet address */

};

/* Internet address */

struct in_addr {

uint32_t s_addr; /* address in network byte order */

};

const struct sockaddr *address;

struct sockaddr_in addr_info;

addr_info.sin_family=AF_INET;

addr_info.sin_port=htons(6666);

addr_info.sin_addr.s_addr=inet_addr("192.168.41.186");

(struct sockaddr *)&addr_info;

int retval=connect(skt_tcpfd,(struct sockaddr *)&addr_info,sizeof(addr_info));

示例:TCP_server.c

cpp 复制代码
#include <stdio.h>
#include <sys/socket.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <netinet/ip.h>
int main()
{
	int skt_tcpfd;
	printf("创建TCP套接字文件描述符\n");
	skt_tcpfd=socket(AF_INET,SOCK_STREAM,0);
	//if(skt_fd==-1)
	//{
	//	perror("创建TCP套接字文件描述符失败");
	//}
	int retval;
	 //struct sockaddr_in {
         //     sa_family_t    sin_family; /* address family: AF_INET */
         //      in_port_t      sin_port;   /* port in network byte order */
         //     struct in_addr sin_addr;   /* internet address */
         // };
	struct sockaddr_in addr_info;
	addr_info.sin_family=AF_INET;
	addr_info.sin_port=htons(6666);
	addr_info.sin_addr.s_addr=htonl(INADDR_ANY);
	 //int bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen);
	printf("绑定端口号与IP地址\n");
	retval=bind(skt_tcpfd,(struct sockaddr *)&addr_info,sizeof(addr_info));
	//if(retval==-1)
	//{
	//	perror("绑定端口号及IP地址失败");
	//}
	printf("开起监听,最大监听数量为100\n");
	retval=listen(skt_tcpfd,100);
	//if(retval==-1)
	//{
	//	perror("绑定端口号及IP地址失败");
	//}
	//int accept(int socket, struct sockaddr *restrict address,
        //  socklen_t *restrict address_len);
	struct sockaddr_in address;
	socklen_t len = sizeof(address);
	int clt_tcpfd=accept(skt_tcpfd,(struct sockaddr *)&address,&len);
	//if(clt_tcpfd==-1)
	//{
	//	perror("接收客户端失败");
	//}
	char rbuf[1024];
	ssize_t rd;
	while(1)
	{
		memset(rbuf,0,sizeof(rbuf));
		rd=read(clt_tcpfd,rbuf,sizeof(rbuf));
		if(rd==-1)
		{
			perror("server:客户端通信异常\n");
			return -1;
		}
		if(rd==0)
		{
			printf("server:客户端断开连接\n");
			break;
		}
		printf("客户端发送了%ld字节的消息为:%s\n",rd,rbuf);
		
	}
	
	close(clt_tcpfd);
	close(skt_tcpfd);
}

示例:TCP_client.c

cpp 复制代码
#include <stdio.h>
#include <sys/socket.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <netinet/ip.h>

int main()
{
	int skt_tcpfd;
	printf("创建TCP套接字文件描述符\n");
	skt_tcpfd=socket(AF_INET,SOCK_STREAM,0);
	//if(skt_fd==-1)
	//{
	//	perror("创建TCP套接字文件描述符失败");
	//}
	
	 //struct sockaddr_in {
         //     sa_family_t    sin_family; /* address family: AF_INET */
         //      in_port_t      sin_port;   /* port in network byte order */
         //     struct in_addr sin_addr;   /* internet address */
         // };
        int retval;
	struct sockaddr_in addr_info;
	addr_info.sin_family=AF_INET;
	addr_info.sin_port=htons(6666);
	addr_info.sin_addr.s_addr=inet_addr("192.168.41.186");
	 //int bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen);
	printf("绑定端口号与IP地址\n");
	retval=connect(skt_tcpfd,(struct sockaddr *)&addr_info,sizeof(addr_info));
	//if(retval==-1)
	//{
	//	perror("绑定端口号及IP地址失败");
	//}
	
	char wbuf[1024];
	ssize_t wr;
	while(1)
	{
		scanf("%s",wbuf);
		wr=write(skt_tcpfd,wbuf,strlen(wbuf));
	}
	
	close(skt_tcpfd);
}
相关推荐
未来之窗软件服务1 小时前
操作系统应用开发(二十四)RustDesk 404错误—东方仙盟筑基期
服务器·远程桌面·仙盟创梦ide·东方仙盟·rustdek
爱隐身的官人2 小时前
JAVA代码审计总结
java·网络·安全
zwhy03112 小时前
TCP服务器设计思路
linux·服务器·网络
YongCheng_Liang2 小时前
Linux 基础命令的 7 大核心模块
linux·运维·服务器
Madison-No74 小时前
【Linux】基础开发工具---yum / apt
linux·运维·服务器
飞天巨兽4 小时前
HTTP基础教程详解
前端·网络·网络协议·http
岑梓铭4 小时前
计算机网络第四章(10)——网络层《路由算法+路由协议》
网络·笔记·计算机网络·考研·智能路由器·408
YongCheng_Liang5 小时前
网络工程师笔记10-BGP协议
运维·网络·笔记
玉树临风江流儿5 小时前
Cmake使用CPack实现打包
java·服务器·前端
迎風吹頭髮5 小时前
UNIX下C语言编程与实践39-UNIX 定时器:alarm 函数与 setitimer 函数的使用与对比
服务器·c语言·unix