socket 指定網口收發資料

2021-07-30 10:52:43 字數 1499 閱讀 6071

在系統中,可能會有多片網口,工作在不同的網段,同時有不同的閘道器,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個位元組全部...