72 lines
1.5 KiB
Smalltalk
72 lines
1.5 KiB
Smalltalk
PackageLoader fileInPackage: 'TCP'!
|
|
|
|
Object subclass: #HelloSocket
|
|
instanceVariableNames: 'ss'
|
|
classVariableNames: ''
|
|
poolDictionaries: ''
|
|
category: 'SimpleEcho'!
|
|
|
|
!HelloSocket class methodsFor: 'instance creation'!
|
|
|
|
port: anInteger
|
|
| ses |
|
|
ses := super new.
|
|
ses init: anInteger.
|
|
^ses
|
|
!!
|
|
|
|
!HelloSocket methodsFor: 'instance initialization'!
|
|
|
|
init: anInteger
|
|
ss := (TCP.ServerSocket port: anInteger).
|
|
^self
|
|
!!
|
|
|
|
!HelloSocket methodsFor: 'running'!
|
|
|
|
run
|
|
| s |
|
|
[
|
|
ss waitForConnection.
|
|
s := (ss accept).
|
|
[self handleSocket: s] fork
|
|
] repeat
|
|
!!
|
|
|
|
!HelloSocket methodsFor: 'handling'!
|
|
|
|
handleSocket: s
|
|
| msg |/**
|
|
Sockets in Neko
|
|
Tectonics:
|
|
nekoc sockets.neko
|
|
sudo nc -vulp 256 & sudo neko sockets
|
|
*/
|
|
|
|
var socket_init = $loader.loadprim("std@socket_init", 0);
|
|
var socket_new = $loader.loadprim("std@socket_new", 1);
|
|
var host_resolve = $loader.loadprim("std@host_resolve", 1);
|
|
var socket_connect = $loader.loadprim("std@socket_connect", 3);
|
|
var socket_write = $loader.loadprim("std@socket_write", 2);
|
|
var socket_close = $loader.loadprim("std@socket_close", 1);
|
|
|
|
/* Initialize Neko socket API */
|
|
socket_init();
|
|
|
|
/* true; UDP, false; TCP */
|
|
var socket = socket_new(true);
|
|
|
|
var c = socket_connect(socket, host_resolve("localhost"), 1256);
|
|
socket_write(socket, "hello socket world");
|
|
|
|
socket_close(socket);
|
|
msg := 'hello socket world'.
|
|
msg displayOn: s.
|
|
(String with: (Character value: 10)) displayOn: s.
|
|
s flush
|
|
!!
|
|
|
|
Smalltalk at: #helloServer put: (HelloSocket port: 2560).
|
|
|
|
helloServer run.
|