网络程序设计基础
- TCP/IP协议中有两种协议:TCP、UDP
- 端口和套接字
- 端口:0-65535,通过不同的端口连接不同的服务,HTTP80,FTP21,
- 套接字: 用来连接应用程序与端口,类似于插座连接电线与电器
TCP程序设计基础
java.net.InetAdress类,与IP地址相关的类,InetAdress类的方法会抛出UnknownHostException,所以必须进行异常处理
java.net.ServerSocket类用于表示服务器套接字
UDP程序设计基础
java.net.DatagramPacket类表示数据包,java.net.DatagramSocket类表示发送和接受数据包的套接字
package ex19_Net;
import java.net.InetAddress;
import java.net.UnknownHostException;
public class InetAdress_test {
public static void main(String args[]) {
InetAddress ip;
try {
ip = InetAddress.getLocalHost();
String localname = ip.getHostName();
String localip = ip.getHostAddress();
System.out.println("name: " + localname);
System.out.println("ip: " + localip);
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
}
package ex19_Net;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class TCP_test {
private BufferedReader reader;
private ServerSocket server;
private Socket socket;
void getserver() {
try {
server = new ServerSocket(8998);
System.out.println("服务器套接字创建成功");
while (true) {
System.out.println("等待客户机的连接");
socket = server.accept();
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
getClientMessage();
}
} catch (Exception e) {
e.printStackTrace();
}
}
private void getClientMessage() {
try {
while (true) {
System.out.println("客户机:" + reader.readLine());
}
} catch (Exception e) {
e.printStackTrace();
}
try {
if (reader != null) {
reader.close();
}
if (socket != null) {
socket.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String args[]) {
TCP_test tcp = new TCP_test();
tcp.getserver();
}
}
package ex19_Net;
import javax.swing.*;
import javax.swing.border.BevelBorder;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.PrintWriter;
import java.net.Socket;
public class TCP_test_client extends JFrame {
private PrintWriter writer;
Socket socket;
private JTextArea ta = new JTextArea();
private JTextField tf = new JTextField();
Container cc;
public TCP_test_client(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() {
@Override
public void actionPerformed(ActionEvent e) {
writer.println(tf.getText());
ta.append(tf.getText() + '\n');
ta.setSelectionEnd(ta.getText().length());
tf.setText("");
}
});
}
private void connect() {
ta.append("尝试连接\n");
try {
socket = new Socket("127.0.0.1",8998);
writer = new PrintWriter(socket.getOutputStream(),true);
ta.append("完成连接\n");
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String args[]) {
TCP_test_client client = new TCP_test_client("向服务器发生数据");
client.setSize(200,200);
client.setVisible(true);
client.connect();
}
}