您的位置:首页 > 理论基础 > 计算机网络

java 网络(socket)

2015-06-16 14:24 155 查看
本文梳理一个基础的java TCP消息通信,构造一个简单的Packet进行传输,代码如下:

Packet

public class Packet {
private String attribute;

public Packet(String attr){
this.attribute = attr;
}

public String getAttribute() {
return attribute;
}
public void setAttribute(String attribute) {
this.attribute = attribute;
}
}


服务器端代码

public class App {

private static final int PORT = 4000;

public static void main(String[] args) throws IOException {

ServerSocket listen = new ServerSocket(PORT);
Socket          client = null;
while(true){
client = listen.accept();
new Thread(new ServerThread(client)).start();
}
}
}


public class ServerThread implements Runnable{

private static final int BUFSIZE  =1024;
private Socket client = null;

public ServerThread(Socket client){
this.client = client;
}

@Override
public void run() {
try {
InputStream in      = client.getInputStream();
OutputStream out = client.getOutputStream();

byte[] buffer = new byte[BUFSIZE];

while (in.read(buffer) != -1) {
//判断包头
if(buffer[0] == 0x01 && buffer[1] == 0x02){
byte[] tmp = new byte[BUFSIZE];
int index = 0;
for(int i = 2; i < buffer.length; i++){
tmp[index++] = buffer[i];
}

Packet packet = new Packet(new String(tmp,"GB2312"));

System.out.println(packet.getAttribute());
}else{
System.out.println("消息格式不正确");
}
}

out.close();
in.close();

} catch (IOException e) {
e.printStackTrace();
}
}
}


客户端代码

public class App {

private static final int PORT = 4000;
private static final int BUFSIZE  =1024;

public static void main(String[] args) throws IOException {

Socket client = new Socket("127.0.0.1", PORT);

InputStream in      = client.getInputStream();
OutputStream out = client.getOutputStream();

Packet packet = new Packet("类型参数2345");

byte[] output = new byte[BUFSIZE];
output[0] = 0x01;
output[1] = 0x02;

int index = 2;
//若增加包长度字段,则可实现packet的分包、组包
byte[] tmp1 = packet.getAttribute().getBytes();
for(int i= 0; i < tmp1.length; i++){
output[index++] = tmp1[i];
}

out.write(output);

byte[] buffer = new byte[BUFSIZE];
while (in.read(buffer) != -1) {
System.out.println(new String(buffer, "GB2312"));
}

out.close();
in.close();
client.close();

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: