网络编程-创建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);
}
相关推荐
MrSYJ3 天前
TCP协议理解
后端·tcp/ip
zzzzzz31010 天前
9K Star 炸裂开源!这个 C 语言写的代码知识图谱,把 Linux 内核索引压缩到了 3 分钟
linux·服务器·sql
大树8814 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
小宇宙Zz14 天前
Maven依赖冲突
java·服务器·maven
网络研究院14 天前
2026年网络安全
网络·安全·法律·法规·趋势·发展
酣大智14 天前
ARP代理--工作原理
运维·网络·arp·arp代理
treesforest14 天前
AI安全系统如何识别异常访问?IP风险识别正在成为关键能力
网络·人工智能·tcp/ip·安全·web安全
shushangyun_14 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
古城小栈14 天前
Unix 与 Linux 异同小叙
linux·服务器·unix
2601_9618451514 天前
粉笔行测题库|系统班|刷题
网络·百度·微信·微信公众平台·facebook·新浪微博