Hola a todos.
gracias a todos por responder.
bueno trate de hacer un ejemplo rapido para poder poner en practica los consejos que me diero y bueno segun yo asi queda el codigo si tengo algun error y tambien si hay liberias que tengo que quitar o agrgar para que funcione en windows.
y bueno estos son los codigos.
servidor:
Código C:
Ver original#define LINUX
#ifdef LINUX
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <winsock2.h>
#include <netinet/in.h>
#define PORT 3550
#define BACKLOG 2
main()
{
int fd, fd2;
struct sockaddr_in server;
struct sockaddr_in client;
int sin_size;
if ((fd=socket(AF_INET, SOCK_STREAM, 0)) == -1 ) {
printf("error en socket()\n"); }
server.sin_family = AF_INET;
server.sin_port = htons(PORT);
server.sin_addr.s_addr = INADDR_ANY;
if(bind(fd,(struct sockaddr*)&server,
sizeof(struct sockaddr))==-1) {
}
if(listen(fd,BACKLOG) == -1) {
printf("error en listen()\n"); }
while(1) {
sin_size=sizeof(struct sockaddr_in);
if ((fd2 = accept(fd,(struct sockaddr *)&client,
&sin_size))==-1) {
printf("error en accept()\n"); }
printf("Se obtuvo una conexión desde %s\n", inet_ntoa(client.sin_addr) );
send(fd2,"Bienvenido a mi servidor.\n",22,0);
close(fd2);
}
}
#elif WINDOWS
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <winsock2.h>
#include <netinet/in.h>
#define PORT 3550
#define BACKLOG 2
main()
{
WSADATA wsa;
WSAStartup(MAKEWORD(2,2),&wsa);
int fd, fd2;
struct sockaddr_in server;
struct sockaddr_in client;
int sin_size;
if ((fd=socket(AF_INET, SOCK_STREAM, 0)) == -1 ) {
printf("error en socket()\n"); }
server.sin_family = AF_INET;
server.sin_port = htons(PORT);
server.sin_addr.s_addr = INADDR_ANY;
if(bind(fd,(struct sockaddr*)&server,
sizeof(struct sockaddr))==-1) {
}
if(listen(fd,BACKLOG) == -1) {
printf("error en listen()\n"); }
while(1) {
sin_size=sizeof(struct sockaddr_in);
if ((fd2 = accept(fd,(struct sockaddr *)&client,
&sin_size))==-1) {
printf("error en accept()\n"); }
printf("Se obtuvo una conexión desde %s\n", inet_ntoa(client.sin_addr) );
send(fd2,"Bienvenido a mi servidor.\n",22,0);
close(fd2);
}
WSACleanup();
}
#endif
cliente:
Código C:
Ver original#define LINUX
#ifdef LINUX
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#define PORT 3550
#define MAXDATASIZE 100
int main(int argc, char *argv[])
{
int fd, numbytes;
char buf[MAXDATASIZE];
struct hostent *he;
struct sockaddr_in server;
if (argc !=2) {
printf("Uso: %s <Dirección IP>\n",argv
[0]); }
if ((he=gethostbyname(argv[1]))==NULL){
printf("gethostbyname() error\n"); }
if ((fd=socket(AF_INET, SOCK_STREAM, 0))==-1){
}
server.sin_family = AF_INET;
server.sin_port = htons(PORT);
server.sin_addr = *((struct in_addr *)he->h_addr);
if(connect(fd, (struct sockaddr *)&server,
sizeof(struct sockaddr))==-1){
}
if ((numbytes=recv(fd,buf,MAXDATASIZE,0)) == -1){
}
buf[numbytes]='\0';
printf("Mensaje del Servidor: %s\n",buf
);
close(fd);
}
#elif WINDOWS
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <winsock2.h>
#include <netinet/in.h>
#include <netdb.h>
#define PORT 3550
#define MAXDATASIZE 100
int main(int argc, char *argv[])
{
WSADATA wsa;
WSAStartup(MAKEWORD(2,2),&wsa);
int fd, numbytes;
char buf[MAXDATASIZE];
struct hostent *he;
struct sockaddr_in server;
if (argc !=2) {
printf("Uso: %s <Dirección IP>\n",argv
[0]); }
if ((he=gethostbyname(argv[1]))==NULL){
printf("gethostbyname() error\n"); }
if ((fd=socket(AF_INET, SOCK_STREAM, 0))==-1){
}
server.sin_family = AF_INET;
server.sin_port = htons(PORT);
server.sin_addr = *((struct in_addr *)he->h_addr);
if(connect(fd, (struct sockaddr *)&server,
sizeof(struct sockaddr))==-1){
}
if ((numbytes=recv(fd,buf,MAXDATASIZE,0)) == -1){
}
buf[numbytes]='\0';
printf("Mensaje del Servidor: %s\n",buf
);
close(fd);
WSACleanup();
}
#endif