Update S11: Practice 3 authored by Jorge's avatar Jorge
[//]: # '![](https://gitlab.eif.urjc.es/rperez/pne-wiki/-/raw/master/s11-client-server-4/Cover/Cover.png)'
# Session 11: Practice 3
* **Time**: 2h
* **Date**: Wednesday, 06-03-2024
* **Goals**:
* Practicing on the programming of servers
* Develop our own server for working with DNA sequences
## Contents
* [Introduction](#introduction)
* [Localhost IP address](#localhost-ip-address)
* [Exercises](#exercises)
* [Exercise 1: PING](#exercise-1-ping)
* [Exercise 2: GET](#exercise-2-get)
* [Exercise 3: INFO](#exercise-3-info)
* [Exercise 4: COMP](#exercise-4-comp)
* [Exercise 5: REV](#exercise-5-rev)
* [Exercise 6: GENE](#exercise-6-gene)
* [Exercise 7: Test-client](#exercise-7-test-client)
* [End of the session](#end-of-the-session)
* [Credits](#credits)
* [License](#license)
## Introduction
The goal of this new assignment is to develop our own **Seq** server to work with **DNA sequences**. We have been working with DNA sequences for several sessions now, but always in our local computer. Now we will make these calculations available to other applications on the Internet.
The first step is to **define** the set of **rules** and **commands** that the **clients** need to use in order to access the **services** provided by our **server**. Communications **protocol** is defined as follows:
| Service name | Request message | Argument | Response message | Description |
|--------------|-----------------|----------|------------------|-------------|
| **PING** | "PING" | none | "OK" | Ping service for testing whether the server is alive of not |
| **GET** | "GET n" | n: 0-4 | A sequence | Gets sequence n. It could be any valid sequence of any length. There are only 5 sequences, numbered from 0 to 4 |
| **INFO** | "INFO seq" | seq: A sequence | See format below | Gets information about a specific sequence: total length, number of bases, and their percentages |
| **COMP** | "COMP seq" | seq: A sequence | The complement sequence | Calculates the complement of a specific sequence |
| **REV** | "REV seq" | seq: A sequence | The reverse sequence | Calculatea the reverse of a specific sequence |
| **GENE** | "GENE name" | Gene name. See format below | The sequence of the gene | Gets the complete sequence of a specific GENE |
The response message returned by the **INFO** service should be like in the following example:
```
Sequence: ATAGACCAAACATGAGAGGCT
Total length: 21
A: 9 (42.9%)
C: 4 (19.0%)
G: 5 (23.8%)
T: 3 (14.3%)
```
The names of the **valid** genes to call the **GENE service** are: **U5**, **ADA**, **FRAT1**, **FXN**, and **RNU6_269P**
The server will be programmed **step by step**, following the guidelines given in the **exercises** below.
## Localhost IP address
There is a special **IP** address: **127.0.0.1**, which is used to identify **your local machines**. When programming a server, instead of using the real IP, it is much easier to use this IP. By doing so, you do not have to change the code when running the server in a different computer.
**We will always use the 127.0.0.1 address** in our local servers.
## Exercises
We will implement the so called **Seq Server**, and develop some clients to test it. While developing the server, we will use the **echo** and **nc** linux commands for **sending messages** to the **server**. But you can also do it from your own client if you like.
The server will be stored in a file called **SeqServer.py** within a folder with name **P03**. You will need to use the **Seq1 module** developed in **P01**, and extend it. As you can see, we are building on previous work.
### Exercise 1: PING
* **Filename:** P03/SeqServer.py
Let's start programming a server that implements the **PING command**. The client will send a message with the word **PING**; then, the server **parses** the request message so if the PING command is **detected**, it generates the response message **"OK!\\n"**. Also, it needs to **print on the console** the message "PING command!", and then the response message in white.
For **testing the server** we can use the following command:
```
echo "PING" | nc 127.0.0.1 8080
```
This is what we will see on the **linux console**:
![](https://gitlab.eif.urjc.es/rperez/pne-wiki/-/raw/master/s11-client-server-4/exercises-01.png)
And this is what we should get in the **Server's console**:
![](https://gitlab.eif.urjc.es/rperez/pne-wiki/-/raw/master/s11-client-server-4/exercises-02.png)
### Exercise 2: GET
* **Filename:** P03/SeqServer.py
Modify the SeqServer to implement the **GET command**. The client sends a message with the word **GET** followed by a **number** between **0** and **4**. The server will return a **response message** with a **sequence** associated to that number. These sequences are for testing purposes, so you can use whatever sequences you want; stored them into a **list** that the server uses to index with the received parameter.
Use the following command to test the server:
```
echo "GET 2" | nc 127.0.0.1 8080
```
In this example the client is asking for the sequence number 2.
This is what is shown in the **Linux's console**:
![](https://gitlab.eif.urjc.es/rperez/pne-wiki/-/raw/master/s11-client-server-4/exercises-03.png)
And this is what we should get in the **Server's console**:
![](https://gitlab.eif.urjc.es/rperez/pne-wiki/-/raw/master/s11-client-server-4/exercises-04.png)
### Exercise 3: INFO
* **Filename:** P03/SeqServer.py
Modify the Seq server for implementing the **INFO command**. The client sends a message with the word **INFO** followed by a sequence. The server will return a **response message** with information about that sequence. This information should be obtained using the **Seq Class**.
For **testing the server** we can use use the following command:
```
echo "INFO AACCGTA" | nc 127.0.0.1 8080
```
This is what is shown in the **Linux's console**:
![](https://gitlab.eif.urjc.es/rperez/pne-wiki/-/raw/master/s11-client-server-4/exercises-05.png)
And this is what we should get in the **Server's console**:
![](https://gitlab.eif.urjc.es/rperez/pne-wiki/-/raw/master/s11-client-server-4/exercises-06.png)
### Exercise 4: COMP
* **Filename:** P03/SeqServer.py
Upgrade the server to respond to the **COMP command**. The client sends a message with the word **COMP** followed by a sequence (the argument of the command). The server will return a **response message** with the complement of that sequence. As always, it must be obtained using the **Seq Class**.
Use the following command to test the server:
```
echo "COMP AACCGTA" | nc 127.0.0.1 8080
```
This is what is shown in the **Linux's console**:
![](https://gitlab.eif.urjc.es/rperez/pne-wiki/-/raw/master/s11-client-server-4/exercises-07.png)
And this is what we should get in the **Server's console**:
![](https://gitlab.eif.urjc.es/rperez/pne-wiki/-/raw/master/s11-client-server-4/exercises-08.png)
### Exercise 5: REV
* **Filename:** P03/SeqServer.py
Modify the server to implement the **REV command**. The client sends a message with the word **REV** followed by a sequence. The server will return a **response message** with the reverse of the sequence. It must be obtained using the **Seq Class**.
Use the following command to test the server:
```
echo "REV AACCGTA" | nc 127.0.0.1 8080
```
This is what is shown in the **Linux's console**:
![](https://gitlab.eif.urjc.es/rperez/pne-wiki/-/raw/master/s11-client-server-4/exercises-09.png)
And this is what we should get in the **Server's console**:
![](https://gitlab.eif.urjc.es/rperez/pne-wiki/-/raw/master/s11-client-server-4/exercises-10.png)
### Exercise 6: GENE
* **Filename:** P3/SeqServer.py
Work on the Seq server so it responds to the **GENE command**. The client sends a message with the word **GENE** followed by a specific (and valid) **gene name**: U5, ADA, FRAT1, FXN, or RNU6_269P. The server will return a **response message** with the whole sequence corresponding to that gene. It must be obtained using the **Seq Class** (and reading the gene from the corresponding file).
Use the following command to test the server:
```
echo "GENE U5" | nc 127.0.0.1 8080
```
This is what is shown in the **Linux's console**:
![](https://gitlab.eif.urjc.es/rperez/pne-wiki/-/raw/master/s11-client-server-4/exercises-11.png)
And this is what we should get in the **Server's console**:
![](https://gitlab.eif.urjc.es/rperez/pne-wiki/-/raw/master/s11-client-server-4/exercises-12.png)
### Exercise 7: Test client
* **Filename:** P03/test-client.py
Finally let's create a client to **test our server**. You must use the **Client class** from **P02** and the **talk** method.
For the services **INFO**, **COMP** and **REV**, use the sequence obtained when calling the **GET 0** command.
The client should **write messages on the console** indicating the test it is performing along with the response obtained from the server:
```
-----| Practice 3, Exercise 7 |------
Connection to SERVER at 127.0.0.1, PORT: 8080
* Testing PING...
OK!
* Testing GET...
GET 0: ACCTCCTCTCCAGCAATGCCAACCCCAGTCCAGGCCCCCATCCGCCCAGGATCTCGATCA
GET 1: AAAAACATTAATCTGTGGCCTTTCTTTGCCATTTCCAACTCTGCCACCTCCATCGAACGA
GET 2: CAAGGTCCCCTTCTTCCTTTCCATTCCCGTCAGCTTCATTTCCCTAATCTCCGTACAAAT
GET 3: CCCTAGCCTGACTCCCTTTCCTTTCCATCCTCACCAGACGCCCGCATGCCGGACCTCAAA
GET 4: AGCGCAAACGCTAAAAACCGGTTGAGTTGACGCACGGAGAGAAGGGGTGTGTGGGTGGGT
* Testing INFO...
Sequence: ACCTCCTCTCCAGCAATGCCAACCCCAGTCCAGGCCCCCATCCGCCCAGGATCTCGATCA
Total length: 60
A: 13 (21.7%)
C: 29 (48.3%)
G: 9 (15.0%)
T: 9 (15.0%)
* Testing COMP...
COMP ACCTCCTCTCCAGCAATGCCAACCCCAGTCCAGGCCCCCATCCGCCCAGGATCTCGATCA
TGGAGGAGAGGTCGTTACGGTTGGGGTCAGGTCCGGGGGTAGGCGGGTCCTAGAGCTAGT
* Testing REV...
REV ACCTCCTCTCCAGCAATGCCAACCCCAGTCCAGGCCCCCATCCGCCCAGGATCTCGATCA
ACTAGCTCTAGGACCCGCCTACCCCCGGACCTGACCCCAACCGTAACGACCTCTCCTCCA
* Testing GENE...
GENE U5
ATAGACCAAACATGAGAGGCTGTGAATGGTATAATCTTCGCCGTTCGACAGGTAAGGTTATTTTTATTTTTTTTTTTTACTATTAAAGCGCTTTATAGATGTTTGTTCTTAAT
[...]
CTAATGTTAACATAAATGGAACTTACATCATTAGCATTATCTCAGACCGTAATAAAATTTGAACAGTAATA
GENE ADA
AGATCGCGCCACTTCACTGCAGCCTCCGCGAAAGAGCGAAACTCCGTCTCAGTAAATAAATAAATAAATAAATAAATAAATAAATAAATAAATAAATAACCTGTACCCGCGTGTTATTTCCCTCCGTCCTTACCTCCTCCCGGCTCCTTCCCTTTCACCTGAGATAACCACTCTTCTCGTATCTATGCTCATCTTTCCCTTGCTTTACATTTTTTCCACCGATGCA
[...]
GAGTGGTTGGGGAA
GENE FRAT1
ACCTCCTCTCCAGCAATGCCAACCCCAGTCCAGGCCCCCATCCGCCCAGGATCTCGATCAAAAAACATTAATCTGTGGCCTTTCTTTGCCATTTCCAACTCTGCCACCTCCATCGAACGACAAGGTCCCCTTCTTCCTTTCCATTCCCGTCAGCTTCATTTCCCTAATCTCCGTACAAATCCCTAGCCTGACTCCCTTTCCTTTCCATCCTCACCAGACGCCCGCA
[...]
CTTTTCAGGGCTGG
GENE FXN
TCTCAAGCATATATAAGCTATGAAAGAAACGTTCACAATCTGTATTCCTTTGCAACATACTAAAGTAAAAATGTCTTTTAAGGTGTATTAACAACTTAATATTTACCATACACTTAGCAGGGTCTAGGGCTTGTCCCCCCACAAAAATACACTTTACATAGATGAACTCATTTTACCCTTAAAGTAACCCTAAGAAGTAGAAACTTTAATAAACTCCATTTTACAG
[...]
GGGTTGAGGAAGGC
GENE RNU6_269P
GAGCAGGAGCAGGTGCTGGCACAAGAGATAGAAGAGCTGTATTTGAAGCTGTCCTCACAGGGTTAACAAGAGTTCTGGACAGAAATATAGTTATAATTAAGCATTAGTCAGGCTGCAATTTGACTCATTTCCTTGTAGCCAGAATTCATGGAGCACTAGATGTTGACCATTTGTATCCCCATTGTTTCTACAGATGAAATTTCTGATGTTAGAATCATAAGGGTTT
[...]
CAATAAAGAAGGGCTGATCTCAAACAGCCTGAGCCTGGTGTCCTAATGGAATGA
Process finished with exit code 0
```
## END of the session
The session is finished. Make sure during this week that everything in this list is checked!
* [ ] You have all the items of S10 checked!
* [ ] Your working repo contains the **P03** folder with the following files:
* [ ] SeqServer.py
* [ ] test-client.py
* [ ] All the previous files have been pushed to your remote Github repo
# Credits
* Rodrigo Pérez Rodríguez
# License
![](https://gitlab.eif.urjc.es/rperez/pne-wiki/-/raw/master/Cover/attribution-share-alike-creative-commons-license.png)
# Links
* [Universidad Rey Juan Carlos de Madrid](https://www.urjc.es/)
[//]: # '![](https://gitlab.eif.urjc.es/rperez/pne-wiki/-/raw/master/s11-client-server-4/Cover/Cover.png)'
# Session 11: Practice 3
* **Time**: 2h
* **Goals**:
* Practicing on the programming of servers
* Develop our own server for working with DNA sequences
## Contents
* [Introduction](#introduction)
* [Localhost IP address](#localhost-ip-address)
* [Exercises](#exercises)
* [Exercise 1: PING](#exercise-1-ping)
* [Exercise 2: GET](#exercise-2-get)
* [Exercise 3: INFO](#exercise-3-info)
* [Exercise 4: COMP](#exercise-4-comp)
* [Exercise 5: REV](#exercise-5-rev)
* [Exercise 6: GENE](#exercise-6-gene)
* [Exercise 7: Test-client](#exercise-7-test-client)
* [End of the session](#end-of-the-session)
* [Credits](#credits)
* [License](#license)
## Introduction
The goal of this new assignment is to develop our own **Seq** server to work with **DNA sequences**. We have been working with DNA sequences for several sessions now, but always in our local computer. Now we will make these calculations available to other applications on the Internet.
The first step is to **define** the set of **rules** and **commands** that the **clients** need to use in order to access the **services** provided by our **server**. Communications **protocol** is defined as follows:
| Service name | Request message | Argument | Response message | Description |
|--------------|-----------------|----------|------------------|-------------|
| **PING** | "PING" | none | "OK" | Ping service for testing whether the server is alive of not |
| **GET** | "GET n" | n: 0-4 | A sequence | Gets sequence n. It could be any valid sequence of any length. There are only 5 sequences, numbered from 0 to 4 |
| **INFO** | "INFO seq" | seq: A sequence | See format below | Gets information about a specific sequence: total length, number of bases, and their percentages |
| **COMP** | "COMP seq" | seq: A sequence | The complement sequence | Calculates the complement of a specific sequence |
| **REV** | "REV seq" | seq: A sequence | The reverse sequence | Calculatea the reverse of a specific sequence |
| **GENE** | "GENE name" | Gene name. See format below | The sequence of the gene | Gets the complete sequence of a specific GENE |
The response message returned by the **INFO** service should be like in the following example:
```
Sequence: ATAGACCAAACATGAGAGGCT
Total length: 21
A: 9 (42.9%)
C: 4 (19.0%)
G: 5 (23.8%)
T: 3 (14.3%)
```
The names of the **valid** genes to call the **GENE service** are: **U5**, **ADA**, **FRAT1**, **FXN**, and **RNU6_269P**
The server will be programmed **step by step**, following the guidelines given in the **exercises** below.
## Localhost IP address
There is a special **IP** address: **127.0.0.1**, which is used to identify **your local machines**. When programming a server, instead of using the real IP, it is much easier to use this IP. By doing so, you do not have to change the code when running the server in a different computer.
**We will always use the 127.0.0.1 address** in our local servers.
## Exercises
We will implement the so called **Seq Server**, and develop some clients to test it. While developing the server, we will use the **echo** and **nc** linux commands for **sending messages** to the **server**. But you can also do it from your own client if you like.
The server will be stored in a file called **SeqServer.py** within a folder with name **P03**. You will need to use the **Seq1 module** developed in **P01**, and extend it. As you can see, we are building on previous work.
### Exercise 1: PING
* **Filename:** P03/SeqServer.py
Let's start programming a server that implements the **PING command**. The client will send a message with the word **PING**; then, the server **parses** the request message so if the PING command is **detected**, it generates the response message **"OK!\\n"**. Also, it needs to **print on the console** the message "PING command!", and then the response message in white.
For **testing the server** we can use the following command:
```
echo "PING" | nc 127.0.0.1 8080
```
This is what we will see on the **linux console**:
![](https://gitlab.eif.urjc.es/rperez/pne-wiki/-/raw/master/s11-client-server-4/exercises-01.png)
And this is what we should get in the **Server's console**:
![](https://gitlab.eif.urjc.es/rperez/pne-wiki/-/raw/master/s11-client-server-4/exercises-02.png)
### Exercise 2: GET
* **Filename:** P03/SeqServer.py
Modify the SeqServer to implement the **GET command**. The client sends a message with the word **GET** followed by a **number** between **0** and **4**. The server will return a **response message** with a **sequence** associated to that number. These sequences are for testing purposes, so you can use whatever sequences you want; stored them into a **list** that the server uses to index with the received parameter.
Use the following command to test the server:
```
echo "GET 2" | nc 127.0.0.1 8080
```
In this example the client is asking for the sequence number 2.
This is what is shown in the **Linux's console**:
![](https://gitlab.eif.urjc.es/rperez/pne-wiki/-/raw/master/s11-client-server-4/exercises-03.png)
And this is what we should get in the **Server's console**:
![](https://gitlab.eif.urjc.es/rperez/pne-wiki/-/raw/master/s11-client-server-4/exercises-04.png)
### Exercise 3: INFO
* **Filename:** P03/SeqServer.py
Modify the Seq server for implementing the **INFO command**. The client sends a message with the word **INFO** followed by a sequence. The server will return a **response message** with information about that sequence. This information should be obtained using the **Seq Class**.
For **testing the server** we can use use the following command:
```
echo "INFO AACCGTA" | nc 127.0.0.1 8080
```
This is what is shown in the **Linux's console**:
![](https://gitlab.eif.urjc.es/rperez/pne-wiki/-/raw/master/s11-client-server-4/exercises-05.png)
And this is what we should get in the **Server's console**:
![](https://gitlab.eif.urjc.es/rperez/pne-wiki/-/raw/master/s11-client-server-4/exercises-06.png)
### Exercise 4: COMP
* **Filename:** P03/SeqServer.py
Upgrade the server to respond to the **COMP command**. The client sends a message with the word **COMP** followed by a sequence (the argument of the command). The server will return a **response message** with the complement of that sequence. As always, it must be obtained using the **Seq Class**.
Use the following command to test the server:
```
echo "COMP AACCGTA" | nc 127.0.0.1 8080
```
This is what is shown in the **Linux's console**:
![](https://gitlab.eif.urjc.es/rperez/pne-wiki/-/raw/master/s11-client-server-4/exercises-07.png)
And this is what we should get in the **Server's console**:
![](https://gitlab.eif.urjc.es/rperez/pne-wiki/-/raw/master/s11-client-server-4/exercises-08.png)
### Exercise 5: REV
* **Filename:** P03/SeqServer.py
Modify the server to implement the **REV command**. The client sends a message with the word **REV** followed by a sequence. The server will return a **response message** with the reverse of the sequence. It must be obtained using the **Seq Class**.
Use the following command to test the server:
```
echo "REV AACCGTA" | nc 127.0.0.1 8080
```
This is what is shown in the **Linux's console**:
![](https://gitlab.eif.urjc.es/rperez/pne-wiki/-/raw/master/s11-client-server-4/exercises-09.png)
And this is what we should get in the **Server's console**:
![](https://gitlab.eif.urjc.es/rperez/pne-wiki/-/raw/master/s11-client-server-4/exercises-10.png)
### Exercise 6: GENE
* **Filename:** P3/SeqServer.py
Work on the Seq server so it responds to the **GENE command**. The client sends a message with the word **GENE** followed by a specific (and valid) **gene name**: U5, ADA, FRAT1, FXN, or RNU6_269P. The server will return a **response message** with the whole sequence corresponding to that gene. It must be obtained using the **Seq Class** (and reading the gene from the corresponding file).
Use the following command to test the server:
```
echo "GENE U5" | nc 127.0.0.1 8080
```
This is what is shown in the **Linux's console**:
![](https://gitlab.eif.urjc.es/rperez/pne-wiki/-/raw/master/s11-client-server-4/exercises-11.png)
And this is what we should get in the **Server's console**:
![](https://gitlab.eif.urjc.es/rperez/pne-wiki/-/raw/master/s11-client-server-4/exercises-12.png)
### Exercise 7: Test client
* **Filename:** P03/test-client.py
Finally let's create a client to **test our server**. You must use the **Client class** from **P02** and the **talk** method.
For the services **INFO**, **COMP** and **REV**, use the sequence obtained when calling the **GET 0** command.
The client should **write messages on the console** indicating the test it is performing along with the response obtained from the server:
```
-----| Practice 3, Exercise 7 |------
Connection to SERVER at 127.0.0.1, PORT: 8080
* Testing PING...
OK!
* Testing GET...
GET 0: ACCTCCTCTCCAGCAATGCCAACCCCAGTCCAGGCCCCCATCCGCCCAGGATCTCGATCA
GET 1: AAAAACATTAATCTGTGGCCTTTCTTTGCCATTTCCAACTCTGCCACCTCCATCGAACGA
GET 2: CAAGGTCCCCTTCTTCCTTTCCATTCCCGTCAGCTTCATTTCCCTAATCTCCGTACAAAT
GET 3: CCCTAGCCTGACTCCCTTTCCTTTCCATCCTCACCAGACGCCCGCATGCCGGACCTCAAA
GET 4: AGCGCAAACGCTAAAAACCGGTTGAGTTGACGCACGGAGAGAAGGGGTGTGTGGGTGGGT
* Testing INFO...
Sequence: ACCTCCTCTCCAGCAATGCCAACCCCAGTCCAGGCCCCCATCCGCCCAGGATCTCGATCA
Total length: 60
A: 13 (21.7%)
C: 29 (48.3%)
G: 9 (15.0%)
T: 9 (15.0%)
* Testing COMP...
COMP ACCTCCTCTCCAGCAATGCCAACCCCAGTCCAGGCCCCCATCCGCCCAGGATCTCGATCA
TGGAGGAGAGGTCGTTACGGTTGGGGTCAGGTCCGGGGGTAGGCGGGTCCTAGAGCTAGT
* Testing REV...
REV ACCTCCTCTCCAGCAATGCCAACCCCAGTCCAGGCCCCCATCCGCCCAGGATCTCGATCA
ACTAGCTCTAGGACCCGCCTACCCCCGGACCTGACCCCAACCGTAACGACCTCTCCTCCA
* Testing GENE...
GENE U5
ATAGACCAAACATGAGAGGCTGTGAATGGTATAATCTTCGCCGTTCGACAGGTAAGGTTATTTTTATTTTTTTTTTTTACTATTAAAGCGCTTTATAGATGTTTGTTCTTAAT
[...]
CTAATGTTAACATAAATGGAACTTACATCATTAGCATTATCTCAGACCGTAATAAAATTTGAACAGTAATA
GENE ADA
AGATCGCGCCACTTCACTGCAGCCTCCGCGAAAGAGCGAAACTCCGTCTCAGTAAATAAATAAATAAATAAATAAATAAATAAATAAATAAATAAATAACCTGTACCCGCGTGTTATTTCCCTCCGTCCTTACCTCCTCCCGGCTCCTTCCCTTTCACCTGAGATAACCACTCTTCTCGTATCTATGCTCATCTTTCCCTTGCTTTACATTTTTTCCACCGATGCA
[...]
GAGTGGTTGGGGAA
GENE FRAT1
ACCTCCTCTCCAGCAATGCCAACCCCAGTCCAGGCCCCCATCCGCCCAGGATCTCGATCAAAAAACATTAATCTGTGGCCTTTCTTTGCCATTTCCAACTCTGCCACCTCCATCGAACGACAAGGTCCCCTTCTTCCTTTCCATTCCCGTCAGCTTCATTTCCCTAATCTCCGTACAAATCCCTAGCCTGACTCCCTTTCCTTTCCATCCTCACCAGACGCCCGCA
[...]
CTTTTCAGGGCTGG
GENE FXN
TCTCAAGCATATATAAGCTATGAAAGAAACGTTCACAATCTGTATTCCTTTGCAACATACTAAAGTAAAAATGTCTTTTAAGGTGTATTAACAACTTAATATTTACCATACACTTAGCAGGGTCTAGGGCTTGTCCCCCCACAAAAATACACTTTACATAGATGAACTCATTTTACCCTTAAAGTAACCCTAAGAAGTAGAAACTTTAATAAACTCCATTTTACAG
[...]
GGGTTGAGGAAGGC
GENE RNU6_269P
GAGCAGGAGCAGGTGCTGGCACAAGAGATAGAAGAGCTGTATTTGAAGCTGTCCTCACAGGGTTAACAAGAGTTCTGGACAGAAATATAGTTATAATTAAGCATTAGTCAGGCTGCAATTTGACTCATTTCCTTGTAGCCAGAATTCATGGAGCACTAGATGTTGACCATTTGTATCCCCATTGTTTCTACAGATGAAATTTCTGATGTTAGAATCATAAGGGTTT
[...]
CAATAAAGAAGGGCTGATCTCAAACAGCCTGAGCCTGGTGTCCTAATGGAATGA
Process finished with exit code 0
```
## END of the session
The session is finished. Make sure during this week that everything in this list is checked!
* [ ] You have all the items of S10 checked!
* [ ] Your working repo contains the **P03** folder with the following files:
* [ ] SeqServer.py
* [ ] test-client.py
* [ ] All the previous files have been pushed to your remote Github repo
# Credits
* Rodrigo Pérez Rodríguez
# License
![](https://gitlab.eif.urjc.es/rperez/pne-wiki/-/raw/master/Cover/attribution-share-alike-creative-commons-license.png)
# Links
* [Universidad Rey Juan Carlos de Madrid](https://www.urjc.es/)
* [Escuela Técnica Superior de Ingeniería de Telecomunicaciones (URJC)](https://www.urjc.es/universidad/facultades/escuela-tecnica-superior-de-ingenieria-de-las-telecomunicaciones/content/etsit-escuela-tecnica-superior-de-ingenieria-de-telecomunicacion)
\ No newline at end of file