套接字(-)

来源:互联网 发布:工业控制网络 pdf 编辑:程序博客网 时间:2024/05/16 00:40

客户端

创建一个套接字

int socket(int domain,in type ,int protocol);

domin参数协议族(标准),type通信类型,protect指定使用饿协议

int sockfd=socket(AF_UNIX,SOCK_STEAM,0);

给套接字地址命名 (结构体类型)

stuctct sockadd_in

{

short int sin_family;

unsigned short int sin_short;

struct in_add sin_add;

}

struct in_addr

{

unsigned long int s_adddr;

}

struct sockaddr_in address;

address.sin_family=AF_UNIX(类型为ipv4)

address.sin_port=htons(6000); 服务器的端口号

adress.sin_addr.s_addr=inet_addr("127.0.0.1");//设置服务器的ip

int res=connect(sockfd,(struct sockaddr*)&saddr,sizeof(saddr)) ;连接服务器

assert(res!=-1);
printf("input:\n");
while(1)
{
char buff[128]={0};
fgets(buff,128,stdin);
if(strncmp(buff,"end",3)==0)
{
break;
}
send(sockfd,buff,strlen(buff),0);
char recvbuff[128]={0};
int i=recv(sockfd,recvbuff,127,0);
printf("%s\n",recvbuff);
buff[0]=0;
}
close(sockfd);
return 0;
}

服务器端


#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <assert.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <sys/socket.h>
int main()
{
int sockfd=socket(AF_INET,SOCK_STREAM,0);
assert(sockfd!=-1);
struct sockaddr_in saddr,caddr;
memset(&saddr,0,sizeof(saddr));
saddr.sin_family=AF_INET;
saddr.sin_port=htons(6000);
saddr.sin_addr.s_addr=inet_addr("127.0.0.1");
int res=bind(sockfd,(struct sockaddr *)&saddr,sizeof(saddr));
assert(res!=1);
listen(sockfd,5);
while(1)
{
int len=sizeof(caddr);
int c=accept(sockfd,(struct sockaddr*)&caddr,&len);
if(c<0)
{
continue;
}
while(1)
{
char buff[128]={0};
int i=recv(c,buff,127,0);
if(i==0)
{
exit(0);
}
printf("%d\n",i);
printf("buff=%s\n",buff);
send(c,"ok",2,0);
}
close(c);
}
}