Your implementation seemed torn between establishing a new connection everytime and establishing a connection once an using it to send all of the messages, there also seemmed to be some confusion between the run method and button actions.
The run methods in the client i would only ever expect to recieve incoming messages, ie establish a ServerSocket and enter the loop and waits ( ssoc.accept()) when a connection is established it reads the message, processes it and then goes back to waiting. basically the soul purpose of the run method in your client is to process the incoming messages.
The button press however could have been done in several way's the way it is now is that when the send button is pressed, a new connection ( socket ) is made to the server and the message is sent and then the connection is closed, the otherway todo it would be to establish a socket that you could send multiple messages down, although that would require your server to be smarter, ie be able to handle multiple, connections basically accept connection fork a process to handle the new connection and go back to waiting for another connection, to see what im talking about check out the snippet of code i found at http://oreilly.com/catalog/javanut3/chapter/ch04.html#ch04_11.html
( I used to love this book)