最近新学了Java Socket TCP编程,将在慕课上学到的知识总结总结。
1>服务器端建立步骤:
1.创建ServerSocket对象,绑定监听端口;
ServerSocket serversocket =new ServerSocket(8888);//端口号一般指定为1023以后,前面端口有可能被系统占用
2.通过accept()方法监听客户端请求;socket=serversocket.accept();
3.连接建立后,通过输入流读取客户端发送的请求信息;
InputStream in=socket.getInputStream();
BufferedReader inr=new BufferedReader(new InputStreamReader(in));
String ss=null;
while((ss=inr.readLine())!=null){
System.out.println("我是服务器,客户端说:"+ss);
}
4.通过输出流向客户端发送响应信息;
OutputStream st=socket.getOutputStream();
PrintWriter str=new PrintWriter(st);
str.write("欢迎您!");
str.flush();
5.关闭相应资源;
inr.close();
in.close();
str.close();
st.close();
2>客户端建立如下:
1.创建Socket对象,指明需要连接的服务器的地址和端口号;
Socket socket=new Socket("localhost",8888);
2.连接建立后,通过输出流向服务器端发送请求信息;
OutputStream st=socket.getOutputStream();
PrintWriter str=new PrintWriter(st);
str.write("哈哈哈,我是客户端");
str.flush();
socket.shutdownOutput();
3.通过输入流获取服务器的响应信息;
InputStream in=socket.getInputStream();
BufferedReader inr=new BufferedReader(new InputStreamReader(in));
String ss=null;
while((ss=inr.readLine())!=null){
System.out.println("客户端接收到消息:"+ss);
}
socket.shutdownInput();
4.关闭相关资源;
inr.close();
in.close();
str.close();
st.close();
socket.close();
下面贴出一个服务器和客户端通过TCP进行通信的实例:
客户端:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
public class Client {
/**
* TCP
*/
public static void main(String[] args) throws IOException {
Socket socket=new Socket("localhost",8888);
OutputStream st=socket.getOutputStream();
PrintWriter str=new PrintWriter(st);
str.write("哈哈哈,我是客户端");
str.flush();
socket.shutdownOutput();
InputStream in=socket.getInputStream();
BufferedReader inr=new BufferedReader(new InputStreamReader(in));
String ss=null;
while((ss=inr.readLine())!=null){
System.out.println("客户端接收到消息:"+ss);
}
socket.shutdownInput();
inr.close();
in.close();
str.close();
st.close();
socket.close();
}
}
服务器端:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import org.omg.CORBA.portable.InputStream;
public class Server {
public static void main(String[] args) {
Socket socket=null;
int count=0;
try {
//创建serversocket对象,绑定监听端口
ServerSocket serversocket =new ServerSocket(8888);
while(true){
//通过accept方法监听客户端请求
socket=serversocket.accept();
ServerThread s=new ServerThread(socket);
s.start();
count++;
System.out.print("当前连接客户端数量为:"+count+" ");
InetAddress address=InetAddress.getLocalHost();
System.out.println("IP地址为:"+address.getHostAddress());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
线程类:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
//TCP
public class ServerThread extends Thread{
Socket socket=null;
public ServerThread(Socket socket){
this.socket=socket;
}
public void run(){
try {
OutputStream st=socket.getOutputStream();
PrintWriter str=new PrintWriter(st);
str.write("欢迎您!");
str.flush();
socket.shutdownOutput();
InputStream in=socket.getInputStream();
BufferedReader inr=new BufferedReader(new InputStreamReader(in));
String ss=null;
while((ss=inr.readLine())!=null){
System.out.println("我是服务器,客户端说:"+ss);
}
socket.shutdownInput();
//关闭资源
inr.close();
in.close();
str.close();
st.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}