Update
This commit is contained in:
parent
6b6fe66cd4
commit
6e8181c3e8
7 changed files with 1799 additions and 1786 deletions
36
network.md
36
network.md
|
@ -8,6 +8,7 @@ First let's try writing some **UDP** C program under [Unix](unix.md). Remember t
|
|||
|
||||
```
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h> // for exit
|
||||
#include <unistd.h> // for sleep
|
||||
|
||||
#include <arpa/inet.h>
|
||||
|
@ -20,17 +21,14 @@ First let's try writing some **UDP** C program under [Unix](unix.md). Remember t
|
|||
|
||||
char buffer[BUFFER_LEN + 1]; // extra space for zero terminator
|
||||
char name; // name of this agent (single char)
|
||||
int sockIn = -1, sockOut = -1; // receive/send socket file descriptors
|
||||
int sock = -1; // socket, for both sending and receiving
|
||||
|
||||
void error(const char *msg)
|
||||
{
|
||||
printf("%c: ERROR, %s\n",name,msg);
|
||||
|
||||
if (sockIn >= 0)
|
||||
close(sockIn);
|
||||
|
||||
if (sockOut >= 0)
|
||||
close(sockOut);
|
||||
if (sock >= 0)
|
||||
close(sock);
|
||||
|
||||
exit(1);
|
||||
}
|
||||
|
@ -47,27 +45,22 @@ int main(int argc, char **argv)
|
|||
|
||||
struct sockaddr_in addrSrc, addrDst;
|
||||
|
||||
sockIn = socket(AF_INET,SOCK_DGRAM | SOCK_NONBLOCK,IPPROTO_UDP);
|
||||
sock = socket(AF_INET,SOCK_DGRAM | SOCK_NONBLOCK,IPPROTO_UDP);
|
||||
|
||||
if (sockIn < 0)
|
||||
error("couldn't create listen socket");
|
||||
|
||||
sockOut = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
|
||||
|
||||
if (sockOut < 0)
|
||||
error("couldn't create send socket");
|
||||
if (sock < 0)
|
||||
error("couldn't create socket");
|
||||
|
||||
addrSrc.sin_family = AF_INET;
|
||||
addrSrc.sin_port = htons(portSrc);
|
||||
addrSrc.sin_port = htons(portSrc); // convert port to netw. endianness
|
||||
addrSrc.sin_addr.s_addr = htonl(INADDR_ANY);
|
||||
|
||||
if (bind(sockIn,(struct sockaddr *) &addrSrc,sizeof(addrSrc)) < 0)
|
||||
error("couldn't bind listen socket");
|
||||
if (bind(sock,(struct sockaddr *) &addrSrc,sizeof(addrSrc)) < 0)
|
||||
error("couldn't bind socket");
|
||||
|
||||
addrDst.sin_family = AF_INET;
|
||||
addrDst.sin_port = htons(portDst);
|
||||
|
||||
if (inet_aton(addrStrDst,&addrDst.sin_addr) == 0)
|
||||
if (inet_aton(addrStrDst,&addrDst.sin_addr) == 0)
|
||||
error("couldn't translate address");
|
||||
|
||||
printf("%c: My name is %c, listening on port %d, "
|
||||
|
@ -78,7 +71,7 @@ int main(int argc, char **argv)
|
|||
{
|
||||
printf("%c: Checking messages...\n",name);
|
||||
|
||||
int len = recv(sockIn,buffer,BUFFER_LEN,0);
|
||||
int len = recv(sock,buffer,BUFFER_LEN,0);
|
||||
|
||||
if (len > 0)
|
||||
{
|
||||
|
@ -93,7 +86,7 @@ int main(int argc, char **argv)
|
|||
|
||||
printf("%c: Sending \"%s\"\n",name,buffer);
|
||||
|
||||
if (sendto(sockOut,buffer,BUFFER_LEN,0,
|
||||
if (sendto(/*sockOut*/sock,buffer,BUFFER_LEN,0,
|
||||
(struct sockaddr *) &addrDst,sizeof(addrDst)) < 0)
|
||||
printf("%c: Couldn't send it!\n",name);
|
||||
|
||||
|
@ -103,8 +96,7 @@ int main(int argc, char **argv)
|
|||
|
||||
printf("%c: That's enough, bye.\n",name);
|
||||
|
||||
close(sockIn);
|
||||
close(sockOut);
|
||||
close(sock);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue