JAVA Socket编程(二)之TCP通信

时间:2023-12-19 16:27:08

基于TCP(面向连接)的socket编程,分为客户端和服务器端。

客户端的流程如下:

(1)创建套接字(socket)

(2)向服务器发出连接请求(connect)

(3)和服务器端进行通信(send/recv)

(4)关闭套接字

服务器端的流程如下:

(1)创建套接字(socket)

(2)将套接字绑定到一个本地地址和端口上(bind)

(3)将套接字设为监听模式,准备接收客户端请求(listen)

(4)等待客户请求到来;当请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept)

(5)用返回的套接字和客户端进行通信(send/recv)

(6)返回,等待另一个客户请求。

(7)关闭套接字。

本文介绍一个多线程的TCP编程

1:创建服务器端并实现线程类  代码如下

 package tcp;

 import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket; public class Server implements Runnable {//实现一个线程类
private Socket soc;
public Server(Socket soc) {
super();
this.soc = soc;
}
private BufferedReader in=null;
private BufferedReader input=null;//获得各种流对象
PrintWriter out=null;
@Override
public void run() {
// TODO Auto-generated method stub
try {
in=new BufferedReader(new InputStreamReader(soc.getInputStream()));
input=new BufferedReader(new InputStreamReader(System.in));
out=new PrintWriter(soc.getOutputStream(),true);//每次都清空输出流
String message;
while((message=in.readLine())!=null){
System.out.println(message);//读取到的客户端数据
System.out.println("输入回执的数据:");
out.println(input.readLine());//回执数据
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally{
try {
in.close();
input.close();//关闭各种流对象
out.close();
} catch (Exception e2) {
e2.printStackTrace();
// TODO: handle exception
}
}
} }

2:创建多线程的启动类   代码如下

 package tcp;

 import java.net.ServerSocket;
import java.net.Socket; public class ServerStart { public static void main(String[] args) {
// TODO Auto-generated method stub
try {
ServerSocket server=new ServerSocket(9000);//这只9000为服务器段
Socket soc=new Socket();
while (true) {
soc=server.accept();//监听端口的链接
new Thread(new Server(soc)).start();//只要有链接就启动一个线程
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
} }

3:创建客户端的类  代码如下

 package tcp;

 import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket; public class Client {
private static Socket soc=null;
private static BufferedReader in=null;
private static BufferedReader input=null;
private static PrintWriter out=null; public static void main(String[] args) {
// TODO Auto-generated method stub
try {
soc=new Socket("127.0.0.1",9000);
while(true){
in=new BufferedReader(new InputStreamReader(soc.getInputStream()));
input=new BufferedReader(new InputStreamReader(System.in));
out=new PrintWriter(soc.getOutputStream(),true);
System.out.println("输入发送的数据:");
String op=input.readLine();
out.println(op);
if(op.equals("aa")){
break;
}
System.out.println(in.readLine());
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally{
try {
in.close();
input.close();
out.close();
} catch (Exception e2) {
// TODO: handle exception
e2.printStackTrace();
}
}
} }

udp查看:http://www.cnblogs.com/GH0522/p/8119289.html