网络编程-创建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);
}
相关推荐
HealthScience12 小时前
vscode怎么连接远程服务器/无密码(使用秘钥)登录
服务器·ide·vscode
h***381813 小时前
SQL 注入漏洞原理以及修复方法
网络·数据库·sql
是小胡嘛13 小时前
华为云CentOS系统中运行http服务器无响应
linux·服务器·c++·http·centos·华为云
小猪佩奇TONY14 小时前
OpenGL-ES 学习(16) ----Pixel Buffer Object
服务器·学习·elasticsearch
RXXW_Dor14 小时前
西门子EtherNet/IP 适配器 通过 EtherNet/IP 将第三方控制系统连接到 SIMATIC S7 控制器
linux·网络·tcp/ip
Mr.H012714 小时前
(上册)TCP 服务器核心流程实操指南
linux·服务器·网络·tcp/ip
HappRobot14 小时前
WebLogic服务器的JVM参数调整
服务器·jvm·chrome
饭九钦vlog15 小时前
修复重装机kali机器上不了网络域名问题一键脚本
服务器·网络·php
YongCheng_Liang15 小时前
Kali Linux TCP 泛洪攻击实验教程与防御方案(仅限合法测试场景)
运维·网络·网络安全
红米饭配南瓜汤16 小时前
WebRTC 码率预估(1) - 接收端 TransportFeedback 生成和发送流程指南
网络·音视频·webrtc·媒体