Very Basic Telnet/Mud Client - coding n00b
Understand first off that I am so green to the idea of programming that I will makes stupid mistakes, and ask stupid questions. Just wanted to throw that out there.
The mission: Design a MUD client for WebOS to run on my Touchpad. :)
Current step: Write a basic telnet app that I can try use as a plugin for the webos pdk.
Why don't I use an existing telnet app? After hours of searching and trying, I haven't found one that "I" can cross-compile successfully.
So... I have started working with some code I found online on writing a socket conversation.
The problem is, that while it connects and reads all the way up to the login, it doesn't appear to be capturing from my keyboard and sending my response. Any insight? Here's what I have so far.
(ANSI to Come?)
Code:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
void error(const char *msg)
{
perror(msg);
exit(0);
}
int main(int argc, char *argv[])
{
int sockfd, portno, n;
struct sockaddr_in serv_addr;
struct hostent *server;
char buffer[256];
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);
if (connect(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0)
error("ERROR connecting");
printf("Please enter the message: ");
bzero(buffer,256);
fgets(buffer,255,stdin);
n = write(sockfd,buffer,strlen(buffer));
if (n < 0)
error("ERROR writing to socket");
while (server != NULL) {
printf("Starting Loop");
bzero(buffer,256);
n = read(sockfd,buffer,2);
printf("%s",buffer);
while (strlen(buffer) > 0) {
bzero(buffer,256);
n = read(sockfd,buffer,255);
printf("%s",buffer);
}
bzero(buffer,256);
fgets(buffer,255,stdin);
n = write(sockfd,buffer,strlen(buffer));
}
close(sockfd);
return 0;
}