我刚开始学习,有什么不对的还希望大家指出。
由于客户端的编写与服务端的编写互相影响,所以两个的代码我是交互着写下的。
下面写的是一个客户端与一个服务端的例子。
对服务端,首先创建ServerSocket的实例,参数端口号的值是0-65535,但是1024以下的端号口会被系统征用,所以我给它分配的端口号是10086。然后创建Socket对象,调用ServerSocket的实例的accept()方法,等待连接,连接之后打印消息。并在下面接受客户端的数据并打印出来。当接受到“exi”t时退出。
- package Socket;
- /**
- * @author Geek_Soledad
- * @creation date 2011-4-24 上午08:22:39
- *
- */
- import java.io.*;
- import java.net.*;
- public class TCPServer {
- public static void main( String[] args) {
- try {
- ServerSocket ss = new ServerSocket(10086);
- Socket s = ss.accept();
- System.out.println("A client connect!");
- DataInputStream dis = new DataInputStream(
- s.getInputStream());
- String is = dis.readUTF();
- while("exit".equalsIgnoreCase(is) == false) {
- System.out.println(is);
- is = dis.readUTF();
- }
- dis.close();
- s.close();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
客户端的编写。
首先创建Socket的实例,参数一为服务端IP,由于我的服务端在本机上,所以用的是127.0.0.1。端口号为服务端开的端口。连接之后打印消息,并开始向服务端发送数据。数据从屏幕输入,每次读取一行。发送数据时使用的是writeUTF()的方法,因为UTF-8的编写比较省空间。当然服务端在读取消息时要用对应的readUTF()方法。
- package Socket;
- /**
- * @author Geek_Soledad
- * @creation date 2011-4-24 上午08:30:47
- *
- */
- import java.io.*;
- import java.net.*;
- public class TCPClient {
- public static void main( String[] args) {
- try {
- Socket s = new Socket("127.0.0.1", 10086);
- System.out.println("成功连上服务端");
- DataOutputStream dos = new DataOutputStream(
- s.getOutputStream());
- BufferedReader bf = new BufferedReader(
- new InputStreamReader(System.in));
- String words ;
- do {
- words = bf.readLine();
- dos.writeUTF(words);
- } while("exit".equalsIgnoreCase(words) == false);
- s.close();
- } catch (UnknownHostException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- System.out.println("服务器IP错误");
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- System.out.println("无法连接主机");
- }
- }
- }