您的位置:首页 > 其它

ubuntu_socket通信_g++编译

2016-01-21 22:15 323 查看
sever.cpp

#include  <unistd.h>
#include  <arpa/inet.h>       /* inet(3) functions */

#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <netinet/in.h>

#define PORT                4321
#define BUFFER_SIZE            1024
#define MAX_QUE_CONN_NM        5

int main()
{
struct sockaddr_in server_sockaddr,client_sockaddr;
socklen_t sin_size,recvbytes;
int sockfd,client_fd;
char buf[BUFFER_SIZE];

//建立socket连接
if((sockfd = socket(AF_INET,SOCK_STREAM,0))==-1)
{
perror("socket");
exit(1);
}

printf("Socket id = %d\n",sockfd);

//设置sockaddr_in结构体中相关参数
server_sockaddr.sin_family =AF_INET;
server_sockaddr.sin_port=htons(PORT);
server_sockaddr.sin_addr.s_addr=INADDR_ANY;
bzero(&(server_sockaddr.sin_zero),8);

int i=1;//允许重复使用本地址与套接字进行绑定
setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&i,sizeof(i));
//绑定函数bind
if(bind(sockfd,(struct sockaddr *)&server_sockaddr,sizeof(struct sockaddr))==-1)
{
perror("bind");
exit(1);
}

printf("Bind success!\n");
//调用Listen函数,创建为处理请求的队列
if(listen(sockfd,MAX_QUE_CONN_NM)==-1)
{
perror("listen");
exit(1);
}
printf("Listening....\n");
//调用accept()函数,等待客户端的连接
if((client_fd=accept(sockfd,(struct sockaddr*)&client_sockaddr,&sin_size))==-1)
{
perror("accept");
exit(1);
}
memset(buf,0,sizeof(buf));
//调用recv()函数,接收客户端的请求
if((recvbytes = recv(client_fd,buf,BUFFER_SIZE,0))==-1)
{
perror("recv");
exit(1);
}
printf("Received a message: %s\n",buf);
close(sockfd);
//exit(0);
return 0;
}


client.cpp

#include  <unistd.h>
#include  <arpa/inet.h>       /* inet(3) functions */
#include <netdb.h> /*gethostbyname function */
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>

#define PORT            4321
#define BUFFER_SIZE        1024

int main(int argc,char *argv[])
{
int sockfd,sendbytes;
char buf[BUFFER_SIZE];
struct hostent *host;
struct sockaddr_in serv_addr;

if(argc<3)
{
fprintf(stderr,"USAGE:./client Hostname(or ip address) Text\n");
exit(1);
}
//地址解析函数
host=gethostbyname(argv[1]);
if(host==NULL)
{
perror("gethostname");
exit(1);
}
memset(buf,0,sizeof(buf));
sprintf(buf,"%s",argv[2]);
//创建socket
if((sockfd =socket(AF_INET,SOCK_STREAM,0))==-1)
{
perror("socket");
exit(1);
}
//设置sockaddr_in结构体中相关参数
serv_addr.sin_family=AF_INET;
serv_addr.sin_port=htons(PORT);
serv_addr.sin_addr=*((struct in_addr*)host->h_addr);
bzero(&(serv_addr.sin_zero),8);
//调用connect函数主动发出对服务端的连接
if(connect(sockfd,(struct sockaddr*)&serv_addr,sizeof(struct sockaddr))==-1)
{
perror("Connect");
exit(1);
}
//发送消息给服务端
if((sendbytes = send(sockfd,buf,strlen(buf),0))==-1)
{
perror("Send");
exit(1);
}
close(sockfd);
exit(0);
}


编译

g++ sever.cpp -o sever

g++ client.cpp -o client

$ ./server

Socket id = 3

Bind success!

Listening....

Received a message: Hello,Server!

$ ./client localhost(或者输入IP地址) Hello,Server!

接收到后程序停止
http://www.eefocus.com/embedded/322834/r0
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: