简单TCP网络编程

通信过程

服务器端:
1、 创建 ServerSocket 对象(并绑定端口)
2、 调用 accept 方法,等待来自客户端的连接
3、 调用 getXXXStream 方法,进行 I/O
4、 关闭 Socket
客户端:
1、 创建 Socket 对象,并连接服务器
2、 调用 getXXXStream 方法,进行 I/O
3、 关闭 Socket
例子:客户端向服务器端发送一个“hello”字符串。服务端接受客户端发送的字符串,在后面增加一个“ from server”字符串,再返回给客户端。
服务器端代码:
服务器端的步骤
创建 ServerSocket 对象(并绑定端口)
while(true){
调用 accept 方法
调用 getXXXStream 方法,进行 I/O
关闭 Socket
}
利用多线程可以实现多用户访问,当一个用户来,就开一个线程给他,不影响多用户同时访问的情况,如果不用多线程的话只能是一个客户端访问,别的客户端要访问的话只能等。

package chp17;
import java.io.*;
import java.net.*;
public class TCPServer {
	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		//创建 ServerSocket 对象(并绑定端口)
		ServerSocket ss = new ServerSocket(9000);
		while(true){
		//调用 accept 方法
		Socket s = ss.accept();
		//创建新线程进行 I/O
		Thread t = new ServerThread(s);
		t.start();
		}
	}

}
class ServerThread extends Thread{
	private Socket s;
	public ServerThread(Socket s) {
		this.s = s;
	}
	public void run(){
		try{
			BufferedReader br =
					new BufferedReader(
							new InputStreamReader(s.getInputStream())
							);
			String line = br.readLine();
			PrintWriter pw = new PrintWriter(
					s.getOutputStream());
			pw.println(line + " from server");
			pw.flush();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			try {
				s.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

客户端代码:

package chp17;
import java.io.*;
import java.net.*;
public class TCPClient {
	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		//创建 Socket 对象(并连接服务器)
		Socket s = new Socket("10.249.151.86", 9000);
		//调用 getXXXStream 方法,进行 I/O
		PrintWriter pw = new PrintWriter(s.getOutputStream());
		pw.println("hello world");
		pw.flush();
		BufferedReader br = new BufferedReader(
		new InputStreamReader(s.getInputStream())
		);
		String line = br.readLine();
		System.out.println(line);
		//关闭 Socket
		s.close();
	}

}

猜你喜欢

转载自blog.csdn.net/sun_fengjiao/article/details/83997640