/* 这是client的code*/
#include <stdio.h>
#include <stdlib.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <errno.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <string.h>
#define S_PORT 3333
#define BUFFER 100
int main(int argc,char **argv)
{
struct sockaddr_in server_addr;
int c_fd,s_fd;
socklen_t s_len;
char *buffer = (char *)malloc(BUFFER+1);
char addr_t[BUFFER];
int s_bits,r_bits=-1;
if(argc != 2){
printf("usage:no valid argument!\n");exit (-1);
}
if(!buffer) {perror("malloc");exit (-1);}
bzero(buffer,BUFFER+1);
c_fd=socket(AF_INET,SOCK_STREAM,0);
if(!c_fd){perror("socket");exit (-1);}
server_addr.sin_port = htons(S_PORT);
/*inet_pton(AF_INET,argv[1],addr_t);*/
server_addr.sin_addr.s_addr = inet_addr(argv[1]);
server_addr.sin_family = AF_INET;
s_len = sizeof(struct sockaddr_in);
if((s_fd=connect(c_fd,(struct sockaddr*)&server_addr,s_len))==-1){
perror("connect");exit (-1);
}
gets(buffer);
s_bits = send(c_fd,buffer,sizeof(buffer),0);
if(s_bits == sizeof(buffer)){
printf("success send to server: %s",buffer);
}
else{
printf("fail send to server!\n");
}
r_bits = recv(c_fd,buffer,sizeof(buffer),0);
if(r_bits == -1){
printf("receive from server error!\n");exit (-1);
}
else printf("receive from the server : %s\n",buffer);
if(close(c_fd)==-1){
printf("close the socket error!\n");exit (-1);
}
return 1;
}
/* 这是server的代码*/
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <errno.h>
#include <fcntl.h>
#include <ctype.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
#define S_PORT 3333
#define BUFFER 100
void up_chars(char *buf){
int i=0;
while((buf[i]=toupper(buf[i])) != '\0')i++;
}
int
main(void)
{
struct sockaddr_in server_addr;
struct sockaddr_in client_addr;
int s_fd;
int c_fd;
socklen_t s_len;
char *buffer;
char addr_t[BUFFER];
int temp;
int flags;
if((buffer = (char*)malloc(BUFFER+1)) == NULL){
fprintf(stderr,"%s",strerror(errno));exit (-1);
}
if((s_fd = socket(AF_INET,SOCK_STREAM,0))==-1){
perror("socket");exit (-1);
}
flags = fcntl(s_fd,F_GETFL);
fcntl(s_fd,F_SETFL,flags |O_NONBLOCK);
s_len = sizeof(struct sockaddr_in);
memset(&server_addr,'\0',s_len);
server_addr.sin_port = htons(S_PORT);
server_addr.sin_addr.s_addr = INADDR_ANY;
server_addr.sin_family = AF_INET;
if(bind(s_fd,(struct sockaddr*)&server_addr,s_len)==-1){
printf("%s",strerror(errno));;exit(-1);
}
if(listen(s_fd,10)==-1){
printf("%s",strerror(errno));exit (-1);
}
while(1){
int bits;
/*sleep(1);*/
c_fd = accept(s_fd,(struct sockaddr*)&client_addr,(socklen_t *)&s_len);
if(c_fd == -1){
continue;
}
else {
inet_ntop(AF_INET,&client_addr.sin_addr,addr_t,sizeof(addr_t));
printf("client ip is %s,port is %d\n",addr_t,ntohs(client_addr.sin_port));
}
bits = recv(c_fd,buffer,sizeof(buffer),0);
if(bits ==-1 && errno != EAGAIN){
printf("fail to receive from client\n");continue;
}
else if(errno = EAGAIN){
printf("socket is not ready now\n");continue;
}
printf("content is : %s\n",buffer);
up_chars(buffer);
bits = send(c_fd,buffer,sizeof(buffer),0);
if(bits == -1 && errno != EAGAIN){
printf("fail to write\n");exit (-1);
}
else if(errno == EAGAIN){
printf("socket is not ready!\n");continue;
}
}
if(close(s_fd)==-1){
printf("fail to close\n");exit (-1);
}
return 1;
}
那位高手帮帮忙呢?
|