TCP(Transmission Control Protocol 传输控制协议)是一种面向连接(连接导向)的、可靠的、基于IP的传输层协议,在Java中网络通信是非常重要的TCP/IP是网络中使用的基本的通信协议。虽然从名字上看TCP/IP包括两个协议,传输控制协议(TCP)和网际协议(IP),但TCP/IP实际上是一组协议,它包括上百个各种功能的协议,如:远程登录、文件传输和电子邮件等,而TCP协议和IP协议是保证数据完整传输的两个基本的重要协议。通常说TCP/IP是Internet协议族,而不单单是TCP和IP。接下来看看简单的例子
package Wangluo;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
public class tread extends Thread{
private Socket socket;
private String name;
public tread(Socket socket){
this.socket=socket;
name=socket.getLocalAddress().getHostName();
//获取客户端主机名字
}
public void run(){
try{
//从Socket 上获得输出流对象 从服务端到客户端
OutputStream p=socket.getOutputStream();
//包装成字符输出流
OutputStreamWriter out=new OutputStreamWriter(p);
//包装成缓冲字符输出流
BufferedWriter buf=new BufferedWriter(out);
//发送消息
buf.write("欢迎来到聊天室"+"\r\n");
buf.flush();
//获得输入流 从客户端到服务端
InputStream inp=socket.getInputStream();
//将输入流包装成字符流
InputStreamReader irs=new InputStreamReader(inp);
//包装成字符缓冲流
BufferedReader br=new BufferedReader(irs);
//读取一行字符串,必须读到\r,\n才会结束,否则一直等待
String str=br.readLine();
while(str!=null){
System.out.println(name+"说:"+str);
//将收到的消息转发给在线的所有其他客户端
//遍历socket队列
for(int i=0;i<Myserver.list.size();i++){
//取出客户端套接字
Socket sc=Myserver.list.get(i);
//转发消息
if(!sc.isClosed()&&sc!=socket){
//从要被转发的客户端套接字上获得数据输出流
OutputStream ops=sc.getOutputStream();
//打包成缓冲字符流
BufferedWriter buf1=new BufferedWriter(new OutputStreamWriter(ops));
//发送消息给该客户端
buf1.write(name+"说"+str+"\r\n");
buf1.flush();
}
}
str=br.readLine();
}
}catch(Exception ef){
ef.printStackTrace();
}
}
}
服务端的代码如下
package Wangluo;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
public class Myserver {
static ArrayList<Socket> list=new ArrayList<Socket>();
public static void main(String[] args) {
try {
//在指定端口创建服务端套接字对象
ServerSocket server=new ServerSocket(9090);
System.out.println("等待连接中");
while(true){
//等待接受客户端的连接
//必须要等到有客户端连上来,该方法才执行完毕,否则一直等待
Socket socket=server.accept();
System.out.println("连上一个客户端"+socket.getRemoteSocketAddress());//得到客户端地址
// System.out.println(socket.getLocalSocketAddress());//得到服务端地址
list.add(socket);//添加元素
tread t=new tread(socket);
t.start();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
这是一个最简单的网络通信例子,也很容易懂