Начало » Linux » LINUX CLIENT/SERVER

Прост CLIENT/SERVER, тестван засега само под SuSE 9.1. Сървърът обръща получения от клиента стринг.
/*CLIENT*/
/*-----------------------------------------------------------------------*/
#include
#include
#include
#include
#include
#include
#include
#define SERVER_HOST "127.0.0.1"
#define SERVER_PORT 4000
#define CL_PORT 4001
int main()
{
extern int errno;
char *greshka,*text=(char *)malloc(128*sizeof(char)),simvol;
int i,sockfd,bytes_rec,count;
struct sockaddr_in serv_addr,cl_addr;
if((sockfd=socket(AF_INET, SOCK_STREAM, 0)) == -1)
{ greshka=strerror(errno);
printf("Socket creation error \n%d %s\n",errno,greshka);
close(sockfd);
exit(-1);}
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(SERVER_PORT);
serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
cl_addr.sin_family = AF_INET;
cl_addr.sin_port = htons(CL_PORT);
cl_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
if(bind(sockfd,(struct sockaddr *)&cl_addr,sizeof(struct sockaddr))==-1)
{ printf("Socket binding errorn");
close(sockfd);
exit(-1);}
if(connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(struct sockaddr)) == -1)
{ printf("Connection errorn");
close(sockfd);
exit(-1);}
for(;;)
{
printf("Enter text to send:nTo end this session end it with .n");
scanf("%s",text);
if (text == "")
break;
simvol=text[strlen(text)-1]; /*saving the last character of the string*/
if(send(sockfd,text,strlen(text),0)==-1)
{printf("Send errorn"); break;};
while((bytes_rec = recv(sockfd, text,strlen(text),0))>0)
{ text[bytes_rec] = '';
printf("Text returned by the server: %sn",text);
for(i=bytes_rec;i>=0;i--)
text[i]='';
}
if(bytes_rec==-1)
{ printf("Error at receivingn"); break;}
if (simvol='.') break;
}
close(sockfd);
printf("Exiting...n");
}
/*SERVER*/
/*-------------------------------------------------------------------*/
#include
#include
#include
#include
#include
#include
#define SERVER_PORT 4000
#define CL_PORT 4001
int main()
{
extern int errno;
char *greshka,simvol,r;
char buffer[1024],buffer2[1024];
int i,p,sockfd,sockfd2,remote_host_size,bytes_rec;
struct sockaddr_in serv_addr;
struct sockaddr_in remote_host;
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{ greshka=strerror(errno);
printf("Socket creation error n"/*%d %sn",errno,greshka*/);
exit(-1);}
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(SERVER_PORT);
serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
remote_host.sin_family = AF_INET;
remote_host.sin_port = htons(CL_PORT);
remote_host.sin_addr.s_addr = inet_addr("127.0.0.1");
remote_host_size=sizeof(struct sockaddr_in);
errno=1;
if (bind(sockfd,(struct sockaddr *)&serv_addr,sizeof(struct sockaddr)) ==-1)
{ greshka=strerror(errno);
printf("Socket-port binding errorn");
printf("sledn");
close(sockfd);
exit(-1); }
printf("Server startedn");
if (listen(sockfd,5)!=0)
{ printf("Listen errorn"); close(sockfd); exit(-1);}
printf("Waiting for connections...n");
printf("--------------------------n");
for(;;)
{
simvol='';
printf("n");
sockfd2=accept(sockfd,(struct sockaddr *)&remote_host,&remote_host_size);
if (sockfd2 == -1)
{ printf("Accept errorn"); break; }
| 01 | SERVER/CLIENT UNIX |
| 02 | TCP/IP SERVER/CLIENT |
|
Коментари за LINUX CLIENT/SERVER
Bravos! Koi po-tochno biblioteki se includvat?