00001 #include <iostream.h>
00002 #include <stdio.h>
00003 #include <stdlib.h>
00004 #include <string.h>
00005 #include <sys/socket.h>
00006 #include <arpa/inet.h>
00007 #include <unistd.h>
00008 #include <netdb.h>
00009
00010
00011 #define MESSAGE 100
00012
00013 void error_Mess(char *error_message){}
00014
00015 int main(int argc , char *argv[])
00016 {
00017 int MySocket;
00018 struct sockaddr_in receiver_addr;
00019 struct sockaddr_in from_addr;
00020 unsigned int receiver_port = 0;
00021 char *host = NULL;
00022 char *message = NULL;
00023 char buffer[MESSAGE+1];
00024 char buffer2[MESSAGE+1];
00025 int MessLen = 0;
00026 int Response_Length = 0;
00027 unsigned int receive_fromSize;
00028 struct hostent* hostdata = NULL;
00029
00030 host = argv[1];
00031 message = argv[2];
00032
00033 if( (MessLen = strlen(message)) > MESSAGE)
00034 cout<<"the message is too long \n";
00035
00036 MySocket = socket(AF_INET, SOCK_DGRAM, 0);
00037
00038 if(MySocket < 0)
00039 {
00040 cout<<"socket error\n";
00041 }
00042
00043 cout<<"socket is a success\n";
00044
00045 if ( atoi( host ) > 0 )
00046 {
00047 unsigned long IP = inet_addr( host );
00048 hostdata = gethostbyaddr( (char*)&IP, sizeof( IP ), PF_INET );
00049 }
00050 else
00051 {
00052 hostdata = gethostbyname( host );
00053 }
00054
00055 memset(&receiver_addr, 0, sizeof(receiver_addr));
00056
00057 receiver_addr.sin_family = AF_INET;
00058 receiver_addr.sin_addr = *(in_addr*)(hostdata->h_addr_list[0]);
00059 receiver_addr.sin_port = htons(4000);
00060
00061 cout << receiver_addr.sin_addr.s_addr << endl;
00062
00063
00064 if((sendto(MySocket , message , MessLen, 0 , (struct sockaddr *)
00065 &receiver_addr , sizeof(receiver_addr))) != MessLen)
00066
00067 cout<<"sendto sent a different number of bytes than expected "<<endl;
00068 else
00069 cout << "Message has been sent\n";
00070
00071 memset( buffer, 0, sizeof(buffer) );
00072
00073 receive_fromSize = sizeof(from_addr);
00074
00075 if((Response_Length = recvfrom(MySocket , buffer , MESSAGE , 0,
00076 (struct sockaddr *)&from_addr , &receive_fromSize)) != MessLen) {
00077 cout<<"receivedfrom failed\n";
00078 }
00079
00080 cout << '[' << MessLen << ']' << endl;
00081 cout << Response_Length << sizeof( buffer ) << strlen(buffer) << endl;
00082
00083 cout << '(' << receive_fromSize << ')' << endl;
00084
00085 memcpy( buffer2, buffer, 14 );
00086
00087
00088 int i = 0;
00089
00090 for(; i < 14; i++ )
00091 printf("[%d]", buffer[i] );
00092
00093
00094
00095 cout<<"I received the buffer from the receiver: ";
00096 cout<< buffer <<endl;
00097
00098
00099 cout << from_addr.sin_addr.s_addr << endl;
00100
00101 if(receiver_addr.sin_addr.s_addr != from_addr.sin_addr.s_addr) {
00102 cout<<"Error, received message from else where!\n";
00103 }
00104
00105
00106
00107
00108 close(MySocket);
00109
00110 return 0;
00111 }
00112