okoineth
❶ winsock.h是什麼語言寫的C語言可以include使用嗎
winsock.h是socket1.0 winsock2.h是socket2.0
socket本來就是在unix系統下為C語言開發的一種基於TCP的傳輸協議 winsock只不過是把它移到windows系統上來罷了 當然是兼容c的 你可以下載socket獨立的庫來使用C調用 也可以使用其它編譯器提供的庫來調用 就看兼容程度了
#include <stdio.h>
#include <WinSock.h>
#pragma comment(lib, "ws2_32.lib")
int main(int argc, char* argv[])
{
HOSTENT *host_entry;
char host_name[256];
int n;
struct WSAData wsadata;
int sock;
struct sockaddr_in srvaddr;
struct hostent *hp;
char data[1024];
char c;
int i = 0;
if(argc<3)
{
printf("Usage: %s ip port\n",argv[0]);
exit(1);
}
if(WSAStartup(0x0101,&wsadata)==0)
{
n = gethostname(host_name, 256);
host_entry=gethostbyname(host_name);
if(host_entry != NULL)
{
printf("%d.%d.%d.%d\n",
host_entry->h_addr_list[0][0]&0x00ff,
host_entry->h_addr_list[0][1]&0x00ff,
host_entry->h_addr_list[0][2]&0x00ff,
host_entry->h_addr_list[0][3]&0x00ff);
}
sock=socket(AF_INET,SOCK_STREAM,0);
if ( sock < 0 )
{
printf("socket create error.\n");
exit(1);
}
srvaddr.sin_family=AF_INET;
hp=gethostbyname(argv[1]);
if(hp==0)
{
printf("unknow host: %s\n",argv[1]);
exit(1);
}
memcpy((char*)&srvaddr.sin_addr,(char*)hp->h_addr,hp->h_length);
srvaddr.sin_port=htons((unsigned short)atoi(argv[2]));
if(connect(sock,(struct sockaddr*)&srvaddr,sizeof(srvaddr))<0)
{
printf("connect server error.\n");
exit(1);
}
while(1)
{
memset(data, 0, 1024);
i = 0;
c = getchar();
while ( c != 10 )
{
data[i++] = c;
c = getchar();
}
data[i] = '\0';
if ( send(sock, data, sizeof(data), 0) < 0 )
{
printf("send data error.\n");
exit(1);
}
if (recv(sock,data,1024,0) )
{
printf("----->%s\n",data);
}
if(strcmp(data, "bye")==0)
{
closesocket(sock);
printf("connecting close.\n");
WSACleanup();
exit(0);
}
}
}
WSACleanup();
return 0;
}
❷ 請問怎麼用Inet下載文件
Private Sub Command1_Click()
Inet1.Execute "文件路徑", "GET"
End Sub
Private Sub Inet1_StateChanged(ByVal State As Integer)
If State = 12 Then
Dim BinBuff() As Byte
BinBuff = Inet1.GetChunk(0, icByteArray)
Open "文件保存路徑" For Binary As #1
Put #1, , BinBuff
Close #1
MsgBox "下載完畢"
End If
End Sub
給你寫了個簡單的小例子,在窗體上添加一個按鈕command1和一個inet控制項inet1
❸ winsock.h的聲明
int WSAStartup(WORD wVersionRequested,LPWSADATA lpWSAData);
[參數]
wVersionRequested - 要求使用Winsock的最低版本號
lpWSAData - Winsock的詳細資料
[返回值]
當函數成功調用時返回0
失敗時返回非0的值
2、socket函數
用於生成socket(soket Descriptor)
[聲明]
SOCKET socket(int af,int type,int protocol);
[參數]
af - 地址家族(通常使用:AF_INET)
type - socket的種類
SOCK_STREAM : 用於TCP協議
SOCK_DGRAM : 用於UDP協議
protocol - 所使用的協議
[返回值]
當函數成功調用時返回一個新的SOCKET(Socket Descriptor)
失敗時返回INVALID_SOCKET.
3、inet_addr函數
把好象xxx.xxx.xxx.xxx的10進制的IP地址轉換為32位整數表示方法
[聲明]
unsigned long inet_addr ( const char FAR *cp );
[參數]
cp - 指向用xxx.xxx.xxx.xxx的10進制來表示的IP地址字元串的指針
[返回值]
當函數成功調用時返回用32位整數表示的IP地址(按網路位元組排列順序)
失敗時返回INADDR_NONE.
4、gethostbyname函數
可以從主機名獲取主機資料.
[聲明]
struct hostent FAR * gethostbyname ( const char FAR *name );
[參數]
name - 指向主機名字元串的指針
[返回值]
當函數成功調用時返回主機信息
失敗時返回NULL(空值)
5、Bind函數
指定本地IP地址所使用的埠號時候使用
[聲明]
int bind ( SOCKET s , const struct sockaddr FAR *addr , int namelen );
[參數]
s - 指向用Socket函數生成的Socket Descriptor
addr - 指向Socket地址的指針
namelen - 該地址的長度.
[返回值]
當函數成功調用時返回0
調用失敗時返回 SOCKET_ERROR
6、connect函數
用於與伺服器建立連接,發出連接請求,必須在參數中指定伺服器的IP地址和埠號
[聲明]
int connect (SOCKET s , const struct sockaddr FAR *name , int namelen );
[參數]
s - 指向用Socket函數生成的Socket Descriptor
name - 指向伺服器地址的指針
namelen - 該地址的長度.
[返回值]
當函數成功調用時返回0
調用失敗時返回 SOCKET_ERROR
7、select函數
可以用於調查一個或多個SOCKET的狀態.
[聲明]
int select ( int nfds , fd_set FAR *readfds , fd_set FAR *writefds , fd_set FAR *exceptfds , const struct timeval FAR *timeout );
[參數]
nfds - 在WINDOWS SOCKET API 中該參數可以忽略,通常賦予NILL值
readfds - 由於接受的SOCKET設備的指針
writefds - 用於發送數據的SOCKET設備的指針
exceptfds - 檢查錯誤的狀態
timeout - 超時設定
[返回值]
返回大於0的值時,表示與條件相符的SOCKET數
返回0表示超時
失敗時返回SOCKET_ERROR
8、recv函數
利用Socket進行接受數據.
[聲明]
int recv ( SOCKET s , char FAR *buf , int len , int flags );
[參數]
s - 指向用Socket函數生成的Socket Descriptor
buf - 接受數據的緩沖區(數組)的指針
len - 緩沖區的大小
flag - 調用方式(MSG_PEEK 或 MSG_OOB)
[返回值]
成功時返回收到的位元組數.
如果連接被中斷則返回0
失敗時返回 SOCKET_ERROR
9、sendto函數
利用Socket進行發送數據.
[聲明]
int sendto ( SOCKET s , const char FAR *buf , int len , int flags , const struct sockaddr FAR *to , int token );
[參數]
s - 指向用Socket函數生成的Socket Descriptor
buf - 接受數據的緩沖區(數組)的指針
len - 緩沖區的大小
flag - 調用方式(MSG_DONTROUTE , MSG_OOB)
to - 指向發送方SOCKET地址的指針
token - 發送方SOCKET地址的大小
[返回值]
成功時返回已經發送的位元組數.
失敗時返回SOCKET_ERROR
❹ omnetpp.h: No such file or directory
#include "omnetpp.h"
❺ inet_ntop的簡介
Linux下inet_pton和inet_ntop這2個IP地址轉換函數,可以在將IP地址在「點分十進制」和「二進制整數」之間轉換。而且,這2個函數能夠處理ipv4和ipv6。算是比較新的函數了。
inet_ntop函數原型如下[將「二進制整數」 -> 「點分十進制」]
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
const char *inet_ntop(int af, const void *src, char *dst, socklen_t cnt);
這個函數轉換網路二進制結構到ASCII類型的地址,參數的作用和inet_pton相同,只是多了一個參數socklen_t cnt,他是所指向緩存區dst的大小,避免溢出,如果緩存區太小無法存儲地址的值,則返回一個空指針,並將errno置為ENOSPC。
❻ netinet/in.h和linux/in.h分別在什麼情況下使用
inet_network() / inet_addr() 等是供用戶層使用的庫函數。 在內核裡面一般都是直接使用整數型,而不用點分十進制形式的IP形式。 不過如果需要的話,可以使用 in_aton() 函數,包含 linux/inet.h 頭文件即可。 find/grep 查找看下吧。