00001 #include <sys/socket.h> 00002 #include <arpa/inet.h> 00003 #include <unistd.h> 00004 #include <stdio.h> 00005 #include <stdlib.h> 00006 #include <string.h> 00007 #include <iostream.h> 00008 00009 #define MESSAGE 100 00010 00011 00012 int main(int argc , char *argv[]) 00013 { 00014 int MySocket; 00015 struct sockaddr_in receiver_addr; 00016 struct sockaddr_in sender_addr; 00017 unsigned int message_length; 00018 char *host; 00019 char *message; 00020 char buffer[MESSAGE]; 00021 unsigned short receiver_port; 00022 int received_MessageSize; 00023 char* buffer2; 00024 00025 receiver_port= atoi(argv[1]); 00026 00027 MySocket = socket(AF_INET, SOCK_DGRAM, 0); 00028 00029 if(MySocket < 0) 00030 { 00031 cout<<"socket failed\n"; 00032 } 00033 00034 cout<<"socket is a success. \n"; 00035 00036 memset(&receiver_addr, 0, sizeof(receiver_addr)); 00037 receiver_addr.sin_family = AF_INET; 00038 receiver_addr.sin_addr.s_addr = htonl(INADDR_ANY); 00039 receiver_addr.sin_port = htons(receiver_port); 00040 00041 if(bind(MySocket , (struct sockaddr *)&receiver_addr 00042 , sizeof(receiver_addr)) < 0) 00043 00044 cout<<"binding has failed\n"; 00045 cout<<"binding has succeeded\n"; 00046 00047 for(;;) 00048 { 00049 message_length = sizeof(sender_addr); 00050 memset( buffer, 0, sizeof(buffer) ); 00051 if ((received_MessageSize = recvfrom(MySocket , buffer , MESSAGE ,0, 00052 (struct sockaddr *) &sender_addr, &message_length)) < 0) { 00053 cout<<"recvfrom() failed\n"; 00054 } 00055 00056 cout << message_length; 00057 00058 cout<<"message has been received \n"; 00059 cout<<"THE MESSAGE IS : "<< buffer <<endl; 00060 00061 00062 memset( buffer, 0, sizeof(buffer) ); 00063 buffer2 = "1234567890"; 00064 00065 memcpy( buffer, buffer2, MESSAGE ); 00066 00067 int i = 0; 00068 00069 for(; i < 14; i++ ) 00070 printf("[%d]%c", buffer[i], buffer2[i] ); 00071 00072 00073 cout << "done" << endl; 00074 00075 if(sendto(MySocket, buffer, MESSAGE, 0, 00076 (struct sockaddr *) &sender_addr , sizeof(sender_addr)) != 00077 MESSAGE ) 00078 00079 cout<<"sendto don't work"<<endl; 00080 } 00081 00082 } 00083 00084 00085 00086 00087 00088