2022 .7.6
山重水复疑无路,柳暗花明又一村。
127.0.0.1 本地回环系统
昨天操作了半天widonws找适配器啊,之类,想在起还是感觉到折磨,
现在好多了,昨天我们学习了网络编程的基础方面的知识,学了建立TCP客服端,服务器;
今天我们学习了DUP客服端服务器的建立并进行通信,咋不多说我先附上昨天以及今天的代码
TCP 的可靠性含义: 接收方收到的数据是完整, 有序, 无差错的。
UDP 不可靠性含义: 接收方接收到的数据可能存在部分丢失, 顺序也不一定能保证。
//TCP
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <strings.h>
#include <string.h>
int main(int argc, char *argv[])
{
/* if(argc<3)
{
printf("input erro\n");
return -1;
}
*/
//创建套接字
int sockfd=socket(AF_INET,SOCK_STREAM,0);
if(sockfd<0){
perror("socket");
return -1;
}
printf("clien is succesful\n");
//邦定
struct sockaddr_in addr;//定义地质结构体用来存储ip和port
addr.sin_family =AF_INET;//internet协议IPV4
addr.sin_port =htons(4399);//端口号
addr.sin_addr.s_addr=inet_addr("127.0.0.1");
//bind(sockdfd,(struct sockaddr *)&addr,sizeof(addr));
//连接
if(connect(sockfd,(struct sockaddr *)&addr,sizeof(addr))<0)
{
perror("connect");
return -1;
}
printf("client connect is succesful\n");
//发消息给服务端
char buf[32]={0};
while(1)
{
fgets(buf,32,stdin);
int ret=send(sockfd,buf,sizeof(buf),0);
if(ret==-1){
perror("send");
return -1;
}
printf("ret=%d\n",ret);
if(!strncmp(buf,"qiut",4))
return -1;
}
close(sockfd);
return 0;
}
#include <stdio.h>
#include<sys/socket.h>
#include <sys/types.h>
#include<string.h>
#include <arpa/inet.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
//创建套接字
int sockfd=socket(AF_INET,SOCK_STREAM,0);
if(-1==sockfd)
{
perror("socket");
return -1;
}
printf("sockfd=%d\n",sockfd);
//绑定套接字,IP地址;
struct sockaddr_in addr;
addr.sin_family =AF_INET;
addr.sin_port =htons(4399);
addr.sin_addr.s_addr=inet_addr("0.0.0.0");
if( bind(sockfd,(struct sockaddr*)&addr,sizeof(addr)) <0 )
{
perror("bind");
return -1;
}
//监听
if( listen(sockfd,5)<0)
{
perror("listen");
return -1;
}
printf("server init success \n server listening..\n");
//连接套客服端
struct sockaddr_in caddr;
socklen_t len=sizeof(caddr);
int connfd=accept(sockfd,(struct sockaddr *)&caddr,&len);
if(connfd<0)
{
perror("accept");
return -1;
}
//
printf("clien ip: %s port: %u \n",inet_ntoa(caddr.sin_addr),ntohs(caddr.sin_port));
char buf[32]={0};
while(1)
{
bzero(buf,sizeof(buf));
int ret=read(connfd,buf,sizeof(buf));
if(ret<0){
perror("read");
return -1;
}
else if(ret==0){
printf("client is leaved \n");
break;
}
else{
printf("ret:%d %s\n",ret,buf);
if(!strncmp(buf,"qiut",4)){
break;
}else if(!strncmp(buf,"exit",4)){
close(connfd);
close(sockfd);
return -1;
}
}
}
return 0;
}
//UDP
#include <stdio.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#include<stdlib.h>
#include<string.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
if(argc<3)
{
printf("erro");
return -1;
}
//创建套接字
int sockfd=socket(AF_INET,SOCK_DGRAM,0);
if(sockfd==-1){
perror("socket");
return -1;
}
//绑定
struct sockaddr_in addr;
addr.sin_family =AF_INET;
addr.sin_port =htons(atoi(argv[2]));
addr.sin_addr.s_addr =inet_addr(argv[1]);
if(bind(sockfd,(struct sockaddr*)&addr,sizeof(addr))<0){
perror("bind");
return -1;
}
char buf[32]={0};
struct sockaddr_in caddr;
socklen_t len =sizeof(caddr);
while(1){
memset(buf,0,sizeof(buf));
memset(&caddr,0,sizeof(caddr));
int ret =recvfrom(sockfd,buf,sizeof(buf),0,(struct sockaddr*)&caddr,&len);
if(ret<0){
perror("recvfrom");
continue;
}
printf("form:%s %u recv:%s \n",inet_ntoa(caddr.sin_addr),ntohs(caddr.sin_port),buf);
//将数据发送到caddr指定的客户端
int ret1=sendto(sockfd,buf,strlen(buf),0,(struct sockaddr *)&caddr,sizeof(caddr));
if(-1==ret1){
perror("sendto");
continue;
}
printf("send ret:%d\n",ret);
if(!strncmp(buf,"exit",4))
break;
}
close(sockfd);
return 0;
}
#include <stdio.h>
#include<string.h>
#include<unistd.h>
#include<sys/types.h>
#include<stdlib.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<sys/socket.h>
int main(int argc, char *argv[])
{
if(argc<3)
{
printf("erro");
return -1;
}
//创建套接字
int sockfd=socket(AF_INET,SOCK_DGRAM,0);
if(-1==sockfd)
{
perror("socket");
return -1;
}
printf("sockfd=%d\n",sockfd);
struct sockaddr_in dest_addr;
dest_addr.sin_family=AF_INET;
dest_addr.sin_port=htons(atoi(argv[2]));
dest_addr.sin_addr.s_addr=inet_addr(argv[1]);//127.0.0.1
//发信息给服务器
char buf[32]={0};
while(1)
{
memset(buf,0,sizeof(buf));
fgets(buf,32,stdin);