在系統中,可能會有多片網口,工作在不同的網段,同時有不同的閘道器,socket需要繫結其中的乙個網絡卡,進行網路的通訊。
設定socket指定為eth1進行收發網路包:
#define inte***xename "eth1"
struct ifreq inte***ce;
strncpy(inte***ce.ifr_ifrn.ifrn_name, inte***xename, sizeof(inte***xename));
if (setsockopt(sock, sol_socket, so_bindtodevice, (char *)&inte***ce, sizeof(inte***ce)) < 0)
demo程式如下:
#include #include #include #include #include #include #include #include #include #include #include #define buf_size 1024
#define inte***xename "eth1"
int sock;
void * network_recv_thread(void * arg)
else if (n==0)
else if (n == -1)
}return null;
}int main(int argc, char *argv)
printf("this is a udp client\n");
if ( (sock=socket(af_inet, sock_dgram, 0)) <0)
struct ifreq inte***ce;
strncpy(inte***ce.ifr_ifrn.ifrn_name, inte***xename, sizeof(inte***xename));
if (setsockopt(sock, sol_socket, so_bindtodevice, (char *)&inte***ce, sizeof(inte***ce)) < 0)
struct sockaddr_in addr;
addr.sin_family = af_inet;
addr.sin_port = htons(atoi(argv[2]));
addr.sin_addr.s_addr = inet_addr(argv[1]);
if (addr.sin_addr.s_addr == inaddr_none)
pthread_t pid;
ret = pthread_create(&pid, null,network_recv_thread, null);
if (ret)
char buff[buf_size];
int n = 0;
while (1)
}pthread_join(pid, null);
return 0;
}
網路除錯助手: Socket收發資料
client write server client read 位元組數writebyte unsignedbyte readunsignedbyte 1 writelengthstring string readstring writebyte byte readbyte 1 writeunsig...
socket資料收發
socket讀寫 tcp協議是面向流的,read和write呼叫的返回值往往小於引數指定的位元組數。對於read呼叫,如果接收緩衝區中有20位元組,請求讀100個位元組,就會返回20。對於write呼叫,如果請求寫100個位元組,而傳送緩衝區中只有20個位元組的空閒位置,那麼write會阻塞,直到把...
socket資料收發
tcp協議是面向流的,read和write呼叫的返回值往往小於引數指定的位元組數。對於read呼叫,如果接收緩衝區中有20位元組,請求讀100個位元組,就會返回20。對於write呼叫,如果請求寫100個位元組,而傳送緩衝區中只有20個位元組的空閒位置,那麼write會阻塞,直到把100個位元組全部...