最近做了一个TCP编程实验,对基于TCP的Socket编程有了新的体会。代码象征性的模拟实现网络通信中的层次结构。
发送时加入头,尾;接收时去掉头,尾。
代码比较简单,就不做太多解释,先运行服务端,再打开客户端。
实验代码如下:
服务端代码:
import java.net.*;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.border.BevelBorder;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
public class MyTCP extends JFrame
{
private BufferedReader reader;
private ServerSocket server;
private Socket socket,socket2;
private PrintWriter writer;
private JTextArea ta=new JTextArea();
private JTextField tf=new JTextField();
Container cc;
public MyTCP(String title)
{
super(title);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
cc=this.getContentPane();
final JScrollPane scrollPane=new JScrollPane();
scrollPane.setBorder(new BevelBorder(BevelBorder.RAISED));
getContentPane().add(scrollPane, BorderLayout.CENTER);
scrollPane.setViewportView(ta);
cc.add(tf,"South");
tf.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
sendMessage();
}
});
}
private void sendMessage()
{
writer.println(appLayer(tf.getText()));
ta.setSelectionEnd(ta.getText().length());
tf.setText("");
}
//coding
private String appLayer(String s)
{
ta.append("Sour"+s+'\n');
return transLayer("H1-"+s);
}
private String transLayer(String s)
{
ta.append("App:"+s+'\n');
return IPLayer("H2-"+s);
}
private String IPLayer(String s)
{
ta.append("Trans:"+s+'\n');
return DLLayer("H3-"+s);
}
private String DLLayer(String s)
{
ta.append("IP:"+s+'\n');
return PhyLayer("H4-"+s+"-T1");
}
private String PhyLayer(String s)
{
ta.append("DateLink:"+s+'\n');
char[] strChar = s.toCharArray();
String result = "";
for (int i = 0; i < strChar.length; i++) {
result += Integer.toBinaryString(strChar[i]) + " ";
}
ta.append("Phy:"+result+'\n');