实验目的和要求
(1)掌握TCP编程:Socket的概念和编程方法。
(2)掌握URL类的使用:URL的概念和编程。
实验内容
(1)使用socket编写一个服务器端程序,服务器端程序在端口8888监听,如果它接到客户端发来的"hello"请求时会回应一个"hello",对客户端的其他请求不响应。
(2)使用Socket编程,客户机发送数据到服务器,服务器将接收到的数据返回给客户机。
(3)设计图形用户界面的客户端程序和服务器端程序,实现客户端读取服务器段内容,要求支持客户端的多线程操作。
实验记录
(1)使用socket编写一个服务器端程序,服务器端程序在端口8888监听,如果它接到客户端发来的"hello"请求时会回应一个"hello",对客户端的其他请求不响应。
import java.io.*;
import java.net.*;
public class t81 {
public static void main(String[] args) {
try {
ServerSocket server=null;
try {
server=new ServerSocket(8888);
} catch (Exception e) {
System.out.println("Error:"+e);
System.exit(-1);
}
Socket client=null;
try {
client=server.accept();
} catch (Exception e) {
System.out.println("接受请求失败");
System.exit(-1);
}
String inputString;
BufferedReader is=new BufferedReader(new InputStreamReader(client.getInputStream()));
PrintWriter os=new PrintWriter(client.getOutputStream());
inputString =is.readLine();
while(!inputString.equals("end")) {
if(inputString.equals("hellow"))
{
os.println("hellow");
os.flush();
inputString =is.readLine();
}
}
os.close();
is.close();
client.close();
server.close();
} catch (Exception e) {
System.out.println("Error:"+e);
}
}
}
(2)使用Socket编程,客户机发送数据到服务器,服务器将接收到的数据返回给客户机。
import java.io.*;
import java.net.*;
public class t82 {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
ServerSocket server=null;
try {
server=new ServerSocket(8888);
} catch (Exception e) {
System.out.println("Error:"+e);
System.exit(-1);
}
Socket client=null;
try {
client=server.accept();
} catch (Exception e) {
System.out.println("接受请求失败");
System.exit(-1);
}
String inputString;
BufferedReader is=new BufferedReader(new InputStreamReader(client.getInputStream()));
PrintWriter os=new PrintWriter(client.getOutputStream());
BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));
System.out.println("冯倩:"+is.readLine());
inputString =sin.readLine();
//System.out.println("冯倩:"+inputString);
while(!inputString.trim().equals("quit")) {
os.println(inputString);
os.flush();
System.out.println("冯倩:"+is.readLine());
inputString =sin.readLine();
}
os.close();
is.close();
client.close();
server.close();
} catch (Exception e) {
System.out.println("Error:"+e);
}
}
}
客户端
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
public class t8_2 {
public static void main(String[] args) {
try {
Socket server=null;
try {
String inputString;
server=new Socket("192.168.137.1",8888);
System.out.println("请输入信息");
BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));
PrintWriter os=new PrintWriter(server.getOutputStream());
BufferedReader is=new BufferedReader(new InputStreamReader(server.getInputStream()));
inputString=sin.readLine();
while(!inputString.trim().equals("quit")) {
os.println(inputString);
os.flush();
System.out.println("小月:"+is.readLine());
inputString=sin.readLine();
}
is.close();
os.close();
server.close();
System.out.println("聊天结束");
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
System.out.println("Error:"+e);
}
}catch(IOException e) {
}
}
}
遇到的问题和解决方法
- 客户端输入后服务器上得不到客户端的消息,原来是把读取服务端消息的语句放在了选择语句内
心得体会
网络编程三要素:
1.IP地址:每个设备在网络中的唯一标识。
2.端口号:每个程序在设备上的唯一标识。
3.协议:为计算机网络中进行数据交换而建立的规则或约定的集合。
UDP: 面向无连接,数据不安全,速度快,不区分客户与服务端。
TCP: 面向连接(三次握手),数据安全,速度略低,分客户端和服务端。