Create server.java
This commit is contained in:
parent
912b3734d8
commit
82f20ce0aa
90
server.java
Normal file
90
server.java
Normal file
@ -0,0 +1,90 @@
|
||||
package TCP;
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.OutputStreamWriter;
|
||||
import java.net.ServerSocket;
|
||||
import java.net.Socket;
|
||||
import java.util.Random;
|
||||
import java.awt.*;
|
||||
|
||||
import TCP.MySegment;
|
||||
|
||||
public class Server {
|
||||
public static int port=8888;
|
||||
public static void send(String content,OutputStreamWriter osw) throws IOException, InterruptedException
|
||||
{
|
||||
Random random=new Random();
|
||||
if(random.nextInt(100)>30)
|
||||
{
|
||||
osw.write(content+"\n");
|
||||
osw.flush();
|
||||
Thread.sleep(200);
|
||||
}
|
||||
else
|
||||
{
|
||||
content="00"+content.substring(2);
|
||||
osw.write(content+"\n");
|
||||
osw.flush();
|
||||
Thread.sleep(200);
|
||||
}
|
||||
}
|
||||
public static void main(String []args) throws IOException, InterruptedException
|
||||
{
|
||||
int ackno=0;
|
||||
int window=1;
|
||||
StringBuilder content =new StringBuilder("0");
|
||||
boolean ack=false;
|
||||
int acked=-1;
|
||||
for(int i=1;i<50;i++) content.append((char)('0'+i%10));
|
||||
|
||||
Frame frame =new Frame("Server");
|
||||
frame.setLayout(new GridLayout(2,1));
|
||||
frame.setTitle("Server");
|
||||
frame.setSize(500, 100);
|
||||
frame.setLocation(800, 200);
|
||||
frame.setAlwaysOnTop(true);
|
||||
frame.setVisible(true);
|
||||
Label toSend=new Label("toSend: "+content.toString());
|
||||
frame.add(toSend);
|
||||
|
||||
ServerSocket server=new ServerSocket(port);
|
||||
Socket socket=server.accept();
|
||||
OutputStreamWriter osw=new OutputStreamWriter(socket.getOutputStream());
|
||||
BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
|
||||
while(true)
|
||||
{
|
||||
String[] segkey=null;
|
||||
for(int i=0;i<50;i++)
|
||||
{
|
||||
if(i>acked&&i<=window+acked)
|
||||
{
|
||||
MySegment seg=new MySegment(socket.getLocalPort(),socket.getPort(),i,ackno,ack,window,(byte)(i%10));
|
||||
send(seg.toSend,osw);
|
||||
System.out.println("sent segment "+seg.SequenceNumber);
|
||||
segkey=br.readLine().split("--");
|
||||
MySegment segACK=new MySegment(Integer.parseInt(segkey[0]),Integer.parseInt(segkey[1]),Integer.parseInt(segkey[2]),Integer.parseInt(segkey[3]),Boolean.parseBoolean(segkey[4]),Integer.parseInt(segkey[5]),Byte.parseByte(segkey[6]));
|
||||
if(segACK.Check==Integer.parseInt(segkey[7]))
|
||||
{
|
||||
if(segACK.ACK)
|
||||
{
|
||||
acked=segACK.AcknowledgementNumber>acked?segACK.AcknowledgementNumber:acked;
|
||||
window=segACK.Window;
|
||||
System.out.println("received ACK of "+segACK.AcknowledgementNumber);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
toSend.setText("toSend: "+content.substring(acked+1).toString());
|
||||
if(acked==49)
|
||||
{
|
||||
toSend.setText("All data sent to Client successfully!");
|
||||
Thread.sleep(3000);
|
||||
break;
|
||||
}
|
||||
}
|
||||
socket.close();
|
||||
server.close();
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user