基于TCPandUDP的socket编程.docx
《基于TCPandUDP的socket编程.docx》由会员分享,可在线阅读,更多相关《基于TCPandUDP的socket编程.docx(8页珍藏版)》请在冰豆网上搜索。
基于TCPandUDP的socket编程
基于TCP-and-UDP的socket编程
天津理工大学实验报告
学院(系)名称:
计算机与通信工程学院
姓名
刘强
学号
20126***
专业
计算机科学与技术(中加)
班级
教学2班
实验项目
基于TCPandUDP的socket编程
课程名称
计算机网络
课程代码
0662016
实验时间
2015年4月30日第7、8节
实验地点
7-215
批改意见
成绩
教师签字:
newInputStreamReader(System.in));//将流连接到标准输入
DataOutputStreamoutToServer=newDataOutputStream(//DataOutputStream包含在java.io.*包中
clientSocket.getOutputStream());
BufferedReaderinFromServer=//inFromServer连接套接字的输入流
newBufferedReader(newInputStreamReader(//BufferedReader包含在java.io.*包中
clientSocket.getInputStream()));
sentence=inFromUser.readLine();//将用户输入的一行读入到sentence中
outToServer.writeBytes(sentence+'\n');//outToServer程序的输出流
modifiedSentence=inFromServer.readLine();//当到达服务器时,他们进入modifiedSentence字符串中
System.out.println("FROMSERVER:
"+modifiedSentence);//将服务器返回来的
//modifiedSentence打印到监视器上
clientSocket.close();//关闭套接字,tcp连接也随之关闭
}
}
TCPServer:
packagetcpServer;
importjava.io.BufferedReader;
importjava.io.DataOutputStream;
importjava.io.InputStreamReader;
import.ServerSocket;
import.Socket;
classserver{
privatestaticServerSocketwelcomeSocket;
publicstaticvoidmain(Stringargv[])throwsException{
StringclientSentence;//声明字符串变量用于存储字符串输入和传送
StringcapitalizedSentence;//从从客户端得到
welcomeSocket=newServerSocket(8579);//创建welcomeSocket对象,在8579端口进行监听
while(true){
SocketconnectionSocket=welcomeSocket.accept();//获取从客户端传来的字符
BufferedReaderinfromClient=newBufferedReader(
newInputStreamReader(//BufferedReader包含在java.io.*包中
connectionSocket.getInputStream()));
DataOutputStreamoutToClient=//outToClient程序的输出流
newDataOutputStream(connectionSocket.getOutputStream());
clientSentence=infromClient.readLine();//把用户输入的送入clientSentence中
capitalizedSentence=clientSentence.toUpperCase()+'\n';//将发送行中的小写转换成大写
outToClient.writeBytes(capitalizedSentence);
}
}
}
执行结果:
UDPClient:
packageudpClient;
importjava.io.BufferedReader;
importjava.io.InputStreamReader;
import.DatagramPacket;
import.DatagramSocket;
import.InetAddress;
publicclassudpClient{
publicstaticvoidmain(Stringargs[])throwsException{
System.out.println("请输入要转换的字符串:
");
BufferedReaderinFromUser=newBufferedReader(newInputStreamReader(
System.in));//创建输入流,用于输入字符串
DatagramSocketclientSocket=newDatagramSocket();//创建一个DatagramSocket对象
InetAddressIPAddress=InetAddress.getByName("127.0.0.1");//创建一个InetAddress
byte[]sendData=newbyte[1024];//创建字节数组
byte[]receiveData=newbyte[1024];
Stringsentence=inFromUser.readLine();//读取输入的字符
sendData=sentence.getBytes();//将字符串转化为字节数组
DatagramPacketsendPacket=newDatagramPacket(sendData,//创建DatagramPacket对象,
//指定其发送地址和端口号
sendData.length,IPAddress,8876);
clientSocket.send(sendPacket);//调用socket对象的send()方法发送数据
DatagramPacketreceivePacket=newDatagramPacket(receiveData,
receiveData.length);//创建DatagramPacket对象,用于接收数据
clientSocket.receive(receivePacket);///调用socket对象的receive()方法接收数据
StringmodifiedSentence=newString(receivePacket.getData());
System.out.println("FROMSERVER:
"+modifiedSentence);
clientSocket.close();//关闭客户端socket连接
}
}
UDPServer:
packageudpServer;
import.DatagramPacket;
import.DatagramSocket;
import.InetAddress;
publicclassudpServer{
publicstaticvoidmain(Stringargs[])throwsException{
@SuppressWarnings("resource")
DatagramSocketserverSocket=newDatagramSocket(8876);//创建一个DatagramSocket
//对象,指定端口为8876
byte[]receiveData=newbyte[1024];//创建字节数组
byte[]sendData=newbyte[1024];
while(true){
DatagramPacketreceivePacket=newDatagramPacket(receiveData,receiveData.length);
//创建一个空DatagramPacket对象
serverSocket.receive(receivePacket);//使用receiver方法接手客户端所发送到数据,
//如果客户端没有发送数据,进程阻塞
Stringsentence=newString(receivePacket.getData());
InetAddressIPAddress=receivePacket.getAddress();//获取Client端IP地址
intport=receivePacket.getPort();//获取Client端端口号
StringcapitalizedSentence=sentence.toUpperCase();//将字符串转化成大写字母
sendData=capitalizedSentence.getBytes();
DatagramPacketsendPacket=newDatagramPacket(sendData,//创建DatagramPacket
//对象,
//指定其发送地址和端口号
sendData.length,IPAddress,port);
serverSocket.send(sendPacket);//调用socket对象的send()方法发送数据
}
}
}
执行结果:
实验体会:
(1)DatagramSockets:
数据包socket,一般传输方式为UDP
(2)StreamSockets:
流socket,一般传输方式为TCP
Java通过两个类DatagramSocket和DatagramPacket来支持但Datagramsocket(UDP)。
DatagramSocket不真正区分Server和Client,既可以用来写server,也可以写client。
但对于java中的Socket类和ServerSocket类就只能分别来写客户端和服务器端(同时支持TCP与UDP,更Socket(Stringhost,intport,booleanstream)构造方法中的stream即可)。