java的的socket的代码编写与C 语言的不太一样,C 语言的代码简练有深度,java的写起来复杂,但是不是那么难懂,因此在这里记录一下模板,防止以后忘记,总共四个文件,分别是ServiceServer.java(用于创建socket服务器),ServiceTask.java(服务器所提供的业务),DataProcess.java(服务器业务数据处理),ServiceCliect.java(socket客户端以及相关业务处理),代码如下
1.ServiceServer.java
package bigdata.socket;
import java.io.IOException;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
import org.apache.log4j.net.SocketServer;
public class ServiceServer {
public static void main(String[] args) throws IOException {
//创建一个serversocket ,然后绑定ip地址和端口号
ServerSocket server = new ServerSocket();
server.bind(new InetSocketAddress("lanc01", 8899));
//等待接受客户端的连接,阻塞程序
while(true){
Socket accept = server.accept();//
new Thread(new ServiceTask(accept)).start();
}
}
}
2.ServiceTask.java
package bigdata.socket;
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;
public class ServiceTask implements Runnable{
Socket socket;
InputStream inputStream = null;
OutputStream outputStream = null;
public ServiceTask(Socket accept) {
this.socket=accept;
}
//客户端业务数据通信处理
@Override
public void run() {
try {
//从socket连接中获取到与client之间的网络通信输入流
inputStream = socket.getInputStream();
outputStream = socket.getOutputStream();//输出流
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
//从网络通信输入流中读取客户端发送过来的数据
//注意:socketinputstream的读书句的方法都是阻塞的
String readLine = bufferedReader.readLine();
//获取数据后业务处理
DataProcess dataProcess = new DataProcess();
String result = dataProcess.getdata(readLine);
//将处理完的数据写到socket的输出流中,然后发送给客户端
//带回车的println,如果没有回车,就会一直读或者写,然后阻塞
PrintWriter printWriter = new PrintWriter(outputStream);
printWriter.println(result);
printWriter.flush();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
inputStream.close();
outputStream.close();
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
3.DataProcess.java
package bigdata.socket;
public class DataProcess {
public String getdata(String param) {
return "linux +++" + param;
}
}
4.ServiceCliect.java
package bigdata.socket;
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.ServerSocket;
import java.net.Socket;
public class ServiceCliect {
public static void main(String[] args) throws IOException {
//建立socket向服务器发送连接请求
Socket socket = new Socket("lanc01",8899 );
InputStream inputStream = socket.getInputStream();
OutputStream outputStream = socket.getOutputStream();
//客户端向socket发送数据
PrintWriter printWriter = new PrintWriter(outputStream);
printWriter.println("==hello==");
printWriter.flush();
//读取数据
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String readLine = bufferedReader.readLine();
System.out.println(readLine);
inputStream.close();
outputStream.close();
socket.close();
}
}