PDA

View Full Version : [Linux API] Chát Client-server Trong mạng LAN



AlexF
23-04-2011, 12:33 PM
Server


/*server*/
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define PORT_LISTEN 9999
int main(int argc, char *argv[])
{
int sockfd, newsockfd;
int clilen;
char buffer[256];
struct sockaddr_in serv_addr, cli_addr;
int n;
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0)
{
fprintf(stderr,"Can't create the socket!\n");
exit(1);
}
bzero((char *) &serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = INADDR_ANY;
serv_addr.sin_port = htons(PORT_LISTEN);
if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0)
{
fprintf(stderr,"Can't bind name to socket!\n");
exit(1);
}
listen(sockfd,5);
clilen = sizeof(cli_addr);
newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen);
if (newsockfd < 0)
{
fprintf(stderr,"Can't accept from client!\n");
exit(1);
}
bzero(buffer,256);
n = read(newsockfd,buffer,255);
if (n < 0)
{
fprintf(stderr,"Error reading from socket!\n");
exit(1);
}
printf("Here is the message: %s\n",buffer);
n = write(newsockfd,"I got your message",18);
if (n < 0)
{
fprintf(stderr,"Error writing to socket!\n");
exit(1);
}

return 0;
}


client


/*This is the client for the TCP socket*/
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#define PORT_LISTEN 9999
#define IP_ADDRESS "127.0.0.1"
int main(int argc, char *argv[])
{
int sockfd, n;
struct sockaddr_in serv_addr;
struct hostent *server;
char buffer[256];
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0)
{
fprintf(stderr, "Error opening the socket!\n");
exit(1);
}

server = gethostbyname(IP_ADDRESS);
if (server == NULL){
fprintf(stderr, "Error, no such a host!\n");
exit(0);
}
bzero((char *) &serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
bcopy((char *)server->h_addr, (char *)&serv_addr.sin_addr.s_addr, server->h_length);
serv_addr.sin_port = htons(PORT_LISTEN);
if (connect(sockfd,&serv_addr,sizeof(serv_addr)) < 0)
{
fprintf(stderr, "Can't connect to server!\n");
exit(1);
}
printf("Please enter the message: ");
bzero(buffer,256);
fgets(buffer,255,stdin);
n = write(sockfd,buffer,strlen(buffer));
if (n < 0){
fprintf(stderr, "Error writing to socket!\n");
exit(1);
}

bzero(buffer,256);
n = read(sockfd,buffer,255);
if (n < 0){
fprintf(stderr, "Error reading from socket!\n");
exit(1);
}

printf("%s\n",buffer);
return 0;
}

duonghn9
17-05-2011, 12:55 AM
minh co 1 vi du dua len cho moi nguoi tham khao,hy vong se giup ich cho moi nguoi

doime
20-05-2011, 06:23 AM
ChatInLan rất hay nếu như có chức năng tự động tìm ai đó đang sử dụng phần mềm chát này trong mạng, cho phép chát giữa không chỉ các máy cùng platform mà cả khác nhau cũng có thể chát được.
Nếu có thể thì mọi người cùng nhau xây dựng cái này.

khanhbk08t1
26-04-2012, 04:22 PM
sao ví dụ của bạn mình không thấy code phần nào bạn có thể cho mình tham khảo code ko?

minh co 1 vi du dua len cho moi nguoi tham khao,hy vong se giup ich cho moi nguoi

clairsang
09-05-2012, 05:33 PM
Có bạn nào có chương trình chat client-client thì cho mình xin với, tìm trên mạng toàn chương trình chat dùng Client - server. Có vẻ rất ít người nghĩ đến client -client trong LAN,