一、服务端接受客户端的消息
//TcpClientimport java.net.*;import java.io.*;
public class TcpClient{public static void main(String[] args) throws Exception{
Socket s = new Socket("192.168.1.103",1888);Thread.sleep(3000);OutputStream os = s.getOutputStream(); //无论是getInputStream还是getOutputStream 都是socket的方法而不是ServerSocket的DataOutputStream dos = new DataOutputStream(os);dos.writeUTF("hello");dos.close();s.close();
}
}
//程序在运行过程中出现了一点小差错,一开始用的是8888,结果测试老是出问题,发现只要一启用server 就会有一个client用户连接,始终找不到问题所在,最后更换端口号,测试正常,以后需要注意这么方面的问题。因为本机8888端口很有可能被其他程序已经占用,所以会有这样的提示
//TcpServerimport java.net.*;import java.io.*;public class TcpServer{
public static void main(String[] args) throws Exception{ServerSocket ss = new ServerSocket(1888);
while(true){Socket s = ss.accept();System.out.println("a client is connected");DataInputStream dis = new DataInputStream(s.getInputStream());System.out.println(dis.readUTF());dis.close();s.close();}
}
}
总结:1、编写Tcp代码时需要配合着写,先写服务端,再写客户端
2、启动程序时,也需要先启用服务端,在启用客户端
3、此外,需要灵活配合使用IO操作相关的类
二、Tcp连接实例2:获取客户端连接的Ip以及端口
//服务端程序import java.net.*;import java.io.*;public class TestTcpServer{
public static void main(String[] args){
try{ServerSocket ss = new ServerSocket(8989);Socket s = ss.accept();DataInputStream dis = new DataInputStream(s.getInputStream());System.out.println("client IP:"+s.getInetAddress()+"client PORT:"+s.getPort());System.out.println(dis.readUTF());dis.close();s.close();}catch(Exception e){System.out.println("系统错误,请连接管理员");}
}
}
//客户端程序import java.net.*;import java.io.*;public class TestTcpClient{
public static void main(String[] args){
try{Socket s = new Socket("192.168.1.103",8989);DataOutputStream dos = new DataOutputStream(s.getOutputStream());dos.writeUTF("Hello Server");dos.close();s.close();}catch(ConnectException ce){System.out.println("连接服务器失败");}catch(IOException ie){System.out.println("数据传输失败");ie.printStackTrace();}
}
}
总结:
1、需要注意的问题与实例1一样,另外服务器端可以获得连接到服务端的客户端的Ip和端口