需要服务器端和客户端
这里是服务器端
package cn.sdut.net;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
//相当于打电话
//端口[0,65535]
//80\443\21\3306等端口号不能随便用
public class TCPServer {//服务器端
public static void main(String[] args) {
try {//抛异常
ServerSocket ss = new ServerSocket(9998);//套接字,绑定服务器的端口,便于客户端的连接。
while(true) {//while循环用于客户端输入的时候,所有的服务器都可以接收。
Socket socket = ss.accept();//这句话的作用是,一旦建立连接就可以执行下面的语句。
System.out.println("连接完成!");
//客户端是用来接收(读取)数据的。
//所以要建立输入流。
InputStream is = socket.getInputStream();//获取输入流。用于读取数据。
//剩余的和输入输出流是一样的。
byte[] bytes = new byte[10];
int len = 0;
String str = null;
while((len = is.read(bytes))!=-1) {
str = new String(bytes,0,len);
System.out.println(str);
}
System.out.println("服务器读取数据结束。。");
//读取完之后回话。
OutputStream os = socket.getOutputStream();//回话的话,需要的是输出流。
os.write("Yes,thank you!".getBytes());//以字节数组的形式输出。
socket.shutdownOutput();//输出结束的标志。
//★注意不是这个socket.shutdownInput();
System.out.println("服务器发送数据结束。。");
//关闭,好的习惯。后开启是先关闭。
is.close();
os.close();
socket.close();
if(str.equals("end")) {
break;//结束的标志,表示客户端不再发送数据。
}
ss.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
这里是客户端
package cn.sdut.net;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
public class TCPClient {//客户端
public static void main(String[] args) {
try {
Socket socket = new Socket(InetAddress.getLocalHost(), 9998);//获取的是服务器端的ip地址和端口号。
//用于建立连接。服务器端有设置的固定端口。ServerSocket(9998);然后用客户端建立连接,接着用accept方法接受连接。
System.out.println("建立连接");
//建立连接之后就可以发送信息了。
//用到输出流。
OutputStream os = socket.getOutputStream();
os.write("Hello!Server".getBytes());
socket.shutdownOutput();//回话结束的标志。
System.out.println("客户端发送数据结束");
//然后是读取服务器端发送来的数据。
InputStream is = socket.getInputStream();
byte[] bytes = new byte[10];
int len = 0;
while((len = is.read(bytes))!=-1) {
String str = new String(bytes,0,len);
System.out.println(str);
}
System.out.println("客户端读取数据完毕");
//好的习惯。
os.close();
is.close();
socket.close();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}