网络编程-创建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);
}
相关推荐
blasit1 天前
笔记:Qt C++建立子线程做一个socket TCP常连接通信
c++·qt·tcp/ip
YuMiao1 天前
gstatic连接问题导致Google Gemini / Studio页面乱码或图标缺失问题
服务器·网络协议
Sinclair4 天前
简单几步,安卓手机秒变服务器,安装 CMS 程序
android·服务器
Rockbean5 天前
用40行代码搭建自己的无服务器OCR
服务器·python·deepseek
茶杯梦轩5 天前
CompletableFuture 在 项目实战 中 创建异步任务 的核心优势及使用场景
服务器·后端·面试
海天鹰6 天前
【免费】PHP主机=域名+解析+主机
服务器
DianSan_ERP6 天前
电商API接口全链路监控:构建坚不可摧的线上运维防线
大数据·运维·网络·人工智能·git·servlet
呉師傅6 天前
火狐浏览器报错配置文件缺失如何解决#操作技巧#
运维·网络·windows·电脑
不是二师兄的八戒6 天前
Linux服务器挂载OSS存储的完整实践指南
linux·运维·服务器
芝士雪豹只抽瑞克五6 天前
Nginx 高性能Web服务器笔记
服务器·nginx