$message = 'wyslij wiadomosc'; $ip = '127.0.0.1'; $port = 9000; $sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); socket_bind($sock, $ip); socket_connect($sock, $ip, $port); $offset = 0; while ($offset < $len){ if ($sent === false){ // Error occurred, break the while loop break; } $offset += $sent; }
Niestety coś to nie chce działać, nie wiem co tutaj może być źle.
Oryginał w C++ (urywki kodu połączenia):
int sock_connect(char *addr, short port, int msec) { int sock; struct hostent *host_ptr; struct sockaddr_in hostname; #ifdef _WIN32 WSADATA wsa; WSAStartup(MAKEWORD(2,2),&wsa); #endif sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); if(sock == -1) return SOCK_ERR_CREATE; host_ptr = gethostbyname(addr); if(host_ptr == NULL) { if(host_ptr == NULL) { sock_close(&sock); return SOCK_ERR_RESOLVE; } } hostname.sin_family = AF_INET; hostname.sin_port = htons(port); memcpy(&hostname.sin_addr, host_ptr->h_addr, host_ptr->h_length); sock_nonblock(&sock); if(sock_select(&sock, msec, WRITE) <= 0) { sock_close(&sock); return SOCK_TIMEOUT; } if(!sock_isvalid(&sock)) { sock_close(&sock); return SOCK_INVALID; } return sock; } int sock_send(int *s, char *buf, int len, int msec) { int rc; int sent = 0; int error; while(sent < len) { rc = sock_select(s, 60000, WRITE); //check if socket is connected if(rc == 0) { return SOCK_TIMEOUT; } if(rc == -1) { return SOCK_TIMEOUT; } if((rc = send(*s, buf+sent, len-sent, 0)) < 0) { error = errno; if(error != EWOULDBLOCK) { return SOCK_TIMEOUT; } rc = 0; } sent += rc; } return sent; }
Pozdrawiam i liczę na pomoc.
