您的位置:首页 > 编程语言

socket编程

2016-07-15 15:44 281 查看
view plaincopy to clipboardprint?

#include <stdio.h>


#include <sys/types.h>


#include <sys/socket.h>


#include <netinet/in.h>


#include <arpa/inet.h>


int
main(int
argc,

char
*argv[])


{

int
server_sockfd;//服务器端套接字


int
client_sockfd;//客户端套接字


int
len;


struct
sockaddr_in my_addr;
//服务器网络地址结构体


struct
sockaddr_in remote_addr;
//客户端网络地址结构体


int
sin_size;


char
buf[BUFSIZ];
//数据传送的缓冲区


memset(&my_addr,0,sizeof(my_addr));
//数据初始化--清零


my_addr.sin_family=AF_INET;
//设置为IP通信


my_addr.sin_addr.s_addr=INADDR_ANY;//服务器IP地址--允许连接到所有本地地址上


my_addr.sin_port=htons(8000);
//服务器端口号




if((server_sockfd=socket(PF_INET,SOCK_STREAM,0))<0)

{

perror("socket");

return
1;


}



if
(bind(server_sockfd,(struct
sockaddr *)&my_addr,sizeof(struct
sockaddr))<0)


{

perror("bind");

return
1;


}



listen(server_sockfd,5);

sin_size=sizeof(struct
sockaddr_in);




if((client_sockfd=accept(server_sockfd,(struct
sockaddr *)&remote_addr,&sin_size))<0)


{

perror("accept");

return
1;


}

printf("accept client %s\n",inet_ntoa(remote_addr.sin_addr));

len=send(client_sockfd,"Welcome to my server\n",21,0);//发送欢迎信息




while((len=recv(client_sockfd,buf,BUFSIZ,0))>0))

{

buf[len]='\0';

printf("%s\n",buf);

if(send(client_sockfd,buf,len,0)<0)

{

perror("write");

return
1;


}

}

close(client_sockfd);

close(server_sockfd);

return
0;






}

[b]TCP协议:[/b]

客户端:tcp_client.c

view plaincopy to clipboardprint?

#include <stdio.h>

#include <sys/types.h>

#include <sys/socket.h>

#include <netinet/in.h>

#include <arpa/inet.h>

int
main(int
argc,

char
*argv[])

{

int
client_sockfd;

int
len;

struct
sockaddr_in remote_addr;
//服务器端网络地址结构体

char
buf[BUFSIZ];
//数据传送的缓冲区

memset(&remote_addr,0,sizeof(remote_addr));
//数据初始化--清零

remote_addr.sin_family=AF_INET;
//设置为IP通信

remote_addr.sin_addr.s_addr=inet_addr("127.0.0.1");//服务器IP地址

remote_addr.sin_port=htons(8000);
//服务器端口号

if((client_sockfd=socket(PF_INET,SOCK_STREAM,0))<0)

{

perror("socket");

return
1;

}

if(connect(client_sockfd,(struct
sockaddr *)&remote_addr,sizeof(struct
sockaddr))<0)

{

perror("connect");

return
1;

}

printf("connected to server\n");

len=recv(client_sockfd,buf,BUFSIZ,0);//接收服务器端信息

buf[len]='\0';

printf("%s",buf);
//打印服务器端信息

while(1)

{

printf("Enter string to send:");

scanf("%s",buf);

if(!strcmp(buf,"quit")

break;

len=send(client_sockfd,buf,strlen(buf),0);

len=recv(client_sockfd,buf,BUFSIZ,0);

buf[len]='\0';

printf("received:%s\n",buf);

}

close(client_sockfd);//关闭套接字

return
0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: