网络编程-创建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);
}
相关推荐
野犬寒鸦3 分钟前
从零起步学习并发编程 || 第五章:悲观锁与乐观锁的思想与实现及实战应用与问题
java·服务器·数据库·学习·语言模型
李小白202002026 分钟前
EMMC写入/烧录逻辑
linux·运维·服务器
hrw_embedded15 分钟前
基于CH395Q网卡移植ftplib的FTP客户端
网络·stm32·ftp·linux库
yixvxi18 分钟前
RFC 8659:DNS CAA资源记录
服务器·https·ssl
不是起点的终点20 分钟前
内网穿透(FRP)
网络
Blurpath住宅代理23 分钟前
动态代理的五大优点:提升爬虫效率与安全性
网络·爬虫·动态ip·住宅ip·住宅代理
三水不滴25 分钟前
计算机网络核心网络模型
经验分享·笔记·tcp/ip·计算机网络·http·https
XHW___00130 分钟前
webrtc 关键模块创建的时机
网络·音视频·webrtc
Trouvaille ~31 分钟前
【Linux】UDP Socket编程实战(二):网络字典与回调设计
linux·运维·服务器·网络·c++·udp·操作系统
凉、介37 分钟前
静态路由探究
网络·笔记·操作系统·嵌入式