Java Socket编程
Socket编程又称为套接字编程,理论方面就不说了,这里说说具体的实现
以下是时现,二者相互读写即聊天的代码。
1、打开网络
2、用流进行数据读写
3、关闭网络
如下代码:
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerSocketDemo {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
ServerSocket ss = new ServerSocket(6699);// 建立服务器端9999端口的监听
// Socket sc=new Socket("IP地址",9999);//客户端程序
Socket sc = ss.accept();// 建立连接
/* 连接只能一次一次建立 */
InputStream in = sc.getInputStream();// 获得连接的输入流
OutputStream out = sc.getOutputStream();// 获得输出流
ServerSocketRead ssr = new ServerSocketRead(in);// 将读线程类实例化
ServerSocketWrite ssw = new ServerSocketWrite(out);// 将写的线程类实例化
Thread tsr = new Thread(ssr);// 创建读写线程
Thread tsw = new Thread(ssw);
tsr.start();
tsw.start();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
读线程:
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
public class ServerSocketRead implements Runnable {
private InputStream in;// 输入流是所有读操作的载体
public ServerSocketRead(InputStream in) {
super();
this.in = in;
}
@Override
public void run() {
// TODO Auto-generated method stub
DataInputStream dis = new DataInputStream(in);//用数据输入流读取数据
try {
while (true) {//让程序循环执行
String str = dis.readUTF();//从输入流读取用UTF编码的字符串
System.out.println("客户端说:" + str);
if("Bye".equals(str)){//加个判断条件在客户端退出的时候服务器端使命结束需要退出。
System.out.println("客户端即将下线!");
System.exit(0);//退出
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
写线程:
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
public class ServerSocketWrite implements Runnable {
private OutputStream out;//输出流作为写操作传输的载体
public ServerSocketWrite(OutputStream out) {
super();
this.out = out;
}
@Override
public void run() {
DataOutputStream dos=new DataOutputStream(out);//用数据输出流处理洗操作并传递到连接里
BufferedReader buf=new BufferedReader(new InputStreamReader(System.in));//从键盘获得键盘输入流
try {
while(true){//为了多次写
String str =buf.readLine();//读取一行键盘输入
System.out.println("服务器端说:"+str);
dos.writeUTF(str);//以UTF编码格式将从键盘读取的输入流字符串放到输出流里面传到socket连接里
/*得给一个结束的标志,防止程序死循环*/
if("Bye".equals(str)){//当写完Bye之后服务器关闭,服务器端程序正常退出
System.out.println("服务器即将关闭!");
System.exit(0);//正常退出
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}