Hey...
Hjælp...
Jeg sidder lig med client og server programmering i c, jeg har ikke ret meget erfaring i c...
Jeg køre det to prossor hver for sig, de fungere, men har problemer med at få clienten til at være online hele tiden så jeg kan indtaste min besked som jeg vil.
Og sener skal jeg udviklere programmet til at køre med multithreading hvor flere clients skal kunne tilføjes på serveren. aner heller ikke hvordan...
//Client
/*
* File: clientD.c
* Author: Dana
*
* Created on 24. marts 2009, 12:07
*/
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
struct sockaddr_in serv_addr;
struct hostent *server;
void error(char *msg) {
perror(msg);
exit(0);
}
void handler(int sfd)
{
int sockfd = sfd;
char buffer[256];
if (connect(sockfd, &serv_addr, sizeof (serv_addr)) < 0) {
error("ERROR connecting");
}
while(1)
{
int n;
printf("\nPlease enter the message: ");
bzero(buffer, 256);
fgets(buffer, 255, stdin);
n = write(sockfd, buffer, strlen(buffer));
if (n < 0) {
error("ERROR writing to socket");
}
bzero(buffer, 256);
n = read(sockfd, buffer, 255);
if (n < 0) {
error("ERROR reading from socket");
}
if (n == 0) {
printf("%s\n", buffer);
fflush(stdin);
}
fflush(stdin);
}
}
int main(int argc, char *argv[]) {
int sockfd, portno;
if (argc < 3) {
fprintf(stderr, "usage %s hostname port\n", argv[0]);
exit(0);
}
portno = atoi(argv[2]);
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0) {
error("ERROR opening socket");
}
server = gethostbyname(argv[1]);
if (server == NULL) {
fprintf(stderr, "ERROR, no such 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(portno);
handler(sockfd);
return 0;
}
// Serveren
/* A simple server in the internet domain using TCP
The port number is passed as an argument
This version runs forever, forking off a separate
process for each connection
*/
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
void dostuff(int); /* function prototype */
void error(char *msg)
{
perror(msg);
exit(1);
}
int main(int argc, char *argv[])
{
int sockfd, newsockfd, portno, clilen, pid;
struct sockaddr_in serv_addr, cli_addr;
if (argc < 2)
{
fprintf(stderr,"ERROR, no port provided\n");
exit(1);
}
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0)
{
error("ERROR opening socket");
}
bzero((char *) &serv_addr, sizeof(serv_addr));
portno = atoi(argv[1]);
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = INADDR_ANY;
serv_addr.sin_port = htons(portno);
if (bind(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0)
{
error("ERROR on binding");
}
listen(sockfd,5);
clilen = sizeof(cli_addr);
while (1)
{
newsockfd = accept(sockfd,(struct sockaddr *) &cli_addr, &clilen);
if (newsockfd < 0)
{
error("ERROR on accept");
}
pid = fork();
if (pid < 0)
{
error("ERROR on fork");
}
if (pid == 0)
{
close(sockfd);
dostuff(newsockfd);
exit(0);
}
else close(newsockfd);
} /* end of while */
return 0; /* we never get here */
}
/******** DOSTUFF() *********************
There is a separate instance of this function
for each connection. It handles all communication
once a connnection has been established.
*****************************************/
void dostuff (int sock)
{
int n;
char buffer[256];
char bufferB[6] = {'s','t','a','r','t','H'};
bzero(buffer,256);
n = read(sock,buffer,255);
if (n < 0) error("ERROR reading from socket");
printf("Here is the message: %s\n",buffer);
n = write(sock,"I got your message",18);
if (n < 0) error("ERROR writing to socket");
helloW();
}
void helloW()
{
printf("Hello World");
}
//END
PS: kan heller ikke få helleW(); functionen til blive kaldt... ?!
På forhånd tak...