1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153:
|
unit USocket;
interface
uses Windows, WinSock, SysUtils;
type Socket = class (TObject) private host: String; port: integer; socket: TSocket; public constructor create(host: String; port: integer); overload; constructor create(socket: TSocket); overload; function connect(): boolean; function dataAvailable(): integer; procedure write(b: integer); overload; procedure write(var b; len: integer); overload; procedure write(s: String); overload; function read(): integer; overload; function read(var b; len: integer): integer; overload; function readLine(): String; overload; procedure close(); end;
implementation
constructor Socket.create(host: String; port: integer); var wsa: WSADATA; begin self.port := port; self.host := host; WSAStartup(MAKEWORD(2,0), wsa); self.socket := winsock.socket(AF_INET, SOCK_STREAM, 0); end;
constructor Socket.create(socket: TSocket); begin self.socket := socket; end;
function Socket.connect(): boolean; var addr: SOCKADDR_IN; rc: integer; begin addr.sin_family := AF_INET; addr.sin_port := htons(self.port); addr.sin_addr.s_addr := inet_addr(PChar(self.host));
rc := winsock.connect(self.socket, addr, sizeof(SOCKADDR_IN));
result := rc <> SOCKET_ERROR; end;
function Socket.dataAvailable(): integer; const len = 1024; var b: array [0..1023] of char; begin result := recv(socket, b, len, MSG_PEEK); end;
procedure Socket.write(b: integer); var tmp: array[0..0] of char ; begin tmp[0] := char(b); send(socket, tmp, 1, 0); end;
procedure Socket.write(var b; len: integer); begin send(socket, b, len, 0); end;
procedure Socket.write(s: String); begin send(self.socket, s[1], length(s), 0); end;
function Socket.read(): integer; var tmp: array[0..0] of char ; begin recv(socket, tmp, 1, 0); result := integer(tmp[0]); end;
function Socket.read(var b; len: integer): integer; begin result := recv(socket, b, len, 0); end;
function Socket.readLine(): String; const LF = char($0A); var buffIn: array[0..255] of char; pos: integer; begin pos := -1; repeat inc(pos); recv(socket, BuffIn[pos], 1, 0); until (buffIn[pos] = LF); buffIn[pos] := char(0); result := String(buffIn); end;
procedure Socket.close(); begin end;
end. |