server:
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<arpa/inet.h>
#include<string.h>
#include<sys/socket.h>
#define BUF_SIZE 1024
void error_handling(char *message);
int main(int argc,char *argv[])
{
int clnt_sock;
int serv_sock;
struct sockaddr_in serv_addr,clnt_addr;
char recvBuf[BUF_SIZE];
char sendBuf[BUF_SIZE];
socklen_t clnt_addr_sz;
int recv_size;
int send_size;
if(argc!=2)
{
printf("Usage :./%s <PORT>",argv[0]);
exit(1);
}
if((serv_sock=socket(PF_INET,SOCK_STREAM,0))==-1)
error_handling("socket() error");
printf("Success to establish a socket\n");
memset(&serv_addr,0,sizeof(serv_addr));
serv_addr.sin_family=AF_INET;
serv_addr.sin_addr.s_addr=htonl(INADDR_ANY);
serv_addr.sin_port=htons(atoi(argv[1]));
if(bind(serv_sock,(struct sockaddr*)&serv_addr,sizeof(serv_addr))==-1)
error_handling("bind() error!");
printf("Success to bind\n");
if(listen(serv_sock,5)==-1)
error_handling("liten() error");
printf("Success to listen\n");
clnt_addr_sz=sizeof(clnt_addr);
if(clnt_sock=accept(serv_sock,(struct sockaddr*)&clnt_addr,&clnt_addr_sz)==-1)
error_handling("accept() error!");
printf("%s joins in!\n",inet_ntoa(clnt_addr.sin_addr));
while(1)
{
printf("waiting for message...\n");
/*Receive datas from client*/
if((recv_size=recv(clnt_sock,recvBuf,BUF_SIZE,0))==-1)
// error_handling("fail to receive datas");
printf("%s\n",recvBuf);
memset(recvBuf,0,BUF_SIZE);
/*send datas to client*/
printf("Server:");
fgets(sendBuf,BUF_SIZE,stdin);
printf("sendBuf: %s\n",sendBuf);
if((send_size=send(clnt_sock,sendBuf,BUF_SIZE,0))==-1)
error_handling("fail to send datas");
printf("Success to send datas\n");
memset(sendBuf,0,BUF_SIZE);
}
close(clnt_sock);
close(serv_sock);
return 0;
}
void error_handling(char *message)
{
fputs(message,stderr);
fputc('\n',stderr);
exit(1);
}
client:
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<arpa/inet.h>
#include<sys/socket.h>
#define BUF_SIZE 1024
void error_handling(char *message);
int main(int argc,char *argv[])
{
int clnt_sock;
char sendBuf[BUF_SIZE];
char recvBuf[BUF_SIZE];
int send_size;
int recv_size;
struct sockaddr_in serv_adr;
if(argc!=3)
{
printf("Usage : %s<IP> <port>\n",argv[0]);
exit(1);
}
//establish a socket
clnt_sock=socket(PF_INET,SOCK_STREAM,0);
if(clnt_sock==-1)
error_handling("socket() error!");
printf("Success to establish the sock\n");
//initialize the server address
memset(&serv_adr,0,sizeof(serv_adr));
serv_adr.sin_family=AF_INET;
serv_adr.sin_addr.s_addr=inet_addr(argv[1]);
serv_adr.sin_port=htons(atoi(argv[2]));
if(connect(clnt_sock,(struct sockaddr*)&serv_adr,sizeof(serv_adr))==-1)
error_handling("connect() error!");
else
printf("Success to connect the socket\n");
while(1)
{
printf("Input:");
fgets(sendBuf,BUF_SIZE,stdin);
if((send_size=send(clnt_sock,sendBuf,BUF_SIZE,0))==-1)
error_handling("send() error");
printf("sendBuf:%s\n",sendBuf);
memset(sendBuf,0,sizeof(sendBuf));
if((recv_size=recv(clnt_sock,recvBuf,BUF_SIZE,0))==-1)
error_handling("ercv() error");
printf("Server:%s\n",recvBuf);
memset(recvBuf,0,sizeof(recvBuf));
}
close(clnt_sock);
return 0;
}
void error_handling(char *message)
{
fputs(message,stderr);
fputc('\n',stderr);
exit(1);
}
錯誤是error_handling("fail to receive datas");
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/134158.html
標籤:網絡通信
