1. Trang chủ
  2. » Công Nghệ Thông Tin

Lập Trinh sockets,Thực hành SOCKETS

23 612 2

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 23
Dung lượng 878,13 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Sử dụng lớp UDPClient để thực hiện kết nối UDP giữa hai máy hoặc giữa 1 máy với nhiều máy.. Bài tập mẫu: Chương 3_bài 1 Thực hiện gởi và nhận dữ liệu giữa hai bên sử dụng giao thức UDP.

Trang 1

THỰC HÀNH TUẦN 3

SOCKETS

1 Lớp IP Address : lớp thể hiện địa chỉ IP Địa chỉ là một tập hợp gồm 4 con số có giá trị từ

0 đến 255 và được cách nhau bởi dấu chấm

IPAddress ipadd = IPAddress Parse(“127.0.0.1”);

2 Lớp IPEndpoint : lớp chứa đựng cả IPAddress và số hiệu cổng

IPEndPoint RemoteIpEndPoint = new IPEndPoint (ipadd, 8080);\

3 Kết nối UDP

Giao thức UDP là giao thức phi kết nối, nói cách khác không cần thiết lập kết nối giữa hai bên khi tiến hành trao đổi thông tin

Giao thức không tin cậy bằng giao thức TCP, nhưng tốc độ lại nhanh và dễ cài đặt Ngoài

ra có thể gửi các gói tin quảng bá (broadcast) đồng thời cho nhiều máy

Sử dụng lớp UDPClient để thực hiện kết nối UDP giữa hai máy hoặc giữa 1 máy với nhiều máy

Bài tập mẫu: (Chương 3_bài 1)

Thực hiện gởi và nhận dữ liệu giữa hai bên sử dụng giao thức UDP

Trang 2

Gợi ý:

Bên A – gọi là UDP client, cần kết nối đến bên B – UDP server để gởi dữ liệu Trong bài tập này, ta cho dữ liệu là chuỗi “Hello World?”

Sự kiện cho nút Send:

private void button1_Click( object sender, EventArgs e)

{

//Tạo kết nối UDP

UdpClient udpClient = new UdpClient ();

//Lấy địa chỉ IP từ textbox và chuyển thành kiểu IPAddress

IPAddress ipadd = IPAddress Parse(tbHost.Text);

- Sử dụng ListBox để nhận dữ liệu từ bên A gởi

- Bắt sự kiện xảy ra khi Form được Load lên

 Khai báo các thành phần:

private System.Windows.Forms ListBox lbConnections;

private void InitializeComponent()

Trang 3

this Controls.Add( this lbConnections);

this Font = new System.Drawing Font ("Microsoft Sans Serif",

9.75F, System.Drawing FontStyle Regular,

System.Drawing GraphicsUnit Point, (( byte )(0)));

this Margin = new System.Windows.Forms Padding (4, 4, 4, 4); this Name = "Form1";

this Text = "Form1";

this Load += new System EventHandler ( this Form1_Load);

this ResumeLayout( false );

}

 Hàm serverThread: đón nhận dữ liệu từ bên A gởi sang và hiện lên ListBox

public void serverThread()

Sự kiện load Form: Tạo một thread để chạy hàm nhận dữ liệu từ bên gởi

private void Form1_Load( object sender, EventArgs e)

{

Trang 4

Thread thdUDPServer = new Thread ( new ThreadStart (serverThread)); thdUDPServer.Start();

}

4 Kết nối TCP

Để đảm bảo độ tin cậy trong các ứng dụng mạng, người ta sử dụng giao thức TCP _ một giao thức có kết nối

Bài 1: (Chương 3_ bài 3 single thread)

Viết chương trình lắng nghe dữ liệu từ dịch vụ Telnet sử dụng kết nối TCP ( sử dụng lớp Socket) với mô tả sau:

1 Chạy chương trình

2 Nhấn nút Listen

3 Mở CMD gõ lệnh: telnet <IP của máy> 8080

4 Vào màn hình telnet, gõ thông điệp tùy ý, sau khi kết thúc, đóng cửa sổ telnet lại thì thông báo trên sẽ được chương trình nhận và hiện lên form

5 Xem hình mẫu

Trang 5

Gợi ý:

Bật telnet trong win 7: http://www.wikihow.com/Activate-Telnet-in-Windows-7

Để có thể telnet đến địa chỉ IP của máy tại cổng 8080, ta phải mở port 8080 lắng nghe kết nối TCP đến port 8080, do đó khi nhấn nút Listen có nghĩa là ta đang thực hiện lắng nghe kết nối tại địa chỉ IP của máy và cổng là 8080

Sự kiện cho nút Listen:

private void btnListen_Click( object sender, EventArgs e)

//AddressFamily: trả về họ địa chỉ của địa chỉ IP hiện hành Ở đây

là địa chỉ Ipv4 nên chọn AddressFamily.InterNetwork //SocketType: kiểu kết nối socket, ở đây dùng luồng Stream để nhận

dữ liệu //ProtocolType: sử dụng giao thức kết nối nào, ở đây sử dụng kết nối TCP

// Ba tham số của hàm đi với nhau khi ta thực hiện kết nối TCP Socket listenerSocket = new Socket (

Trang 6

IPEndPoint ipepServer = new

//Đồng ý kết nối clientSocket = listenerSocket.Accept();

Trang 7

Gợi ý:

static void Main( string [] args)

{

IPAddress test1 = IPAddress Parse("192.168.1.1");

IPAddress test2 = IPAddress Loopback;

IPAddress test3 = IPAddress Broadcast;

IPAddress test4 = IPAddress Any;

IPAddress test5 = IPAddress None;

//IPHostEntry ihe =

// Dns.GetHostByName(Dns.GetHostName());

IPHostEntry ihe = Dns GetHostEntry( Dns GetHostName());

IPAddress myself = ihe.AddressList[0];

Bài 3: (Chuong 3 _ bai 6)

Viêt chương trình thực hiện các yêu cầu sau:

- Khởi tạo một địa chỉ IP 127.0.0.1 với cổng 8000

- Khởi tạo một socket có tên là test, kết nối TCP

- In ra các thuộc tính Address Family, SocketType, Protocol Type của socket test

- Kiểm tra xem socket có đang ở chế độ Blocking hay không?

Trang 8

- Set Blocking = false? Kiểm tra lại chế độ Blocking, Connected sau khi set blocking

bằng false

- Gán địa chỉ IP + port đến socket

- In ra địa chỉ IP + port vừa được gán tới socket

Gợi ý:

static void Main( string [] args)

{

IPAddress ia = IPAddress Parse("127.0.0.1");

IPEndPoint ie = new IPEndPoint (ia, 8000);

Socket test = new Socket ( AddressFamily InterNetwork,

SocketType Stream, ProtocolType Tcp);

Console WriteLine("new Blocking: {0}", test.Blocking);

Console WriteLine("Connected: {0}", test.Connected);

test.Bind(ie);

IPEndPoint iep = ( IPEndPoint )test.LocalEndPoint;

Trang 9

Console WriteLine("Local EndPoint: {0}",

iep.ToString());

test.Close();

Console ReadLine();

}

Bài 4 (Chương 3_ bai 5)

Viêt chương trình thực hiện các yêu cầu sau:

- Khởi tạo một địa chỉ IP 127.0.0.1 với cổng 8000

- In ra địa chỉ IP và số hiệu cổng trên

- In ra các thuộc tính Address Family, địa chỉ và cổng

- In ra số hiệu cổng tối thiểu và tối đa

- Thay đổi số hiệu cổng thành 80

- In ra địa chỉ IP và số hiệu cổng đã được thay đổi

- In ra SocketAdress

Gợi ý:

static void Main( string [] args)

Trang 10

{

IPAddress test1 = IPAddress Parse("192.168.1.1");

IPEndPoint ie = new IPEndPoint (test1, 8000);

Console WriteLine("The IPEndPoint is: {0}",

Bài 5: (Chương 3_bài 8)

Viết chương trình lắng nghe dữ liệu từ dịch vụ Telnet sử dụng kết nối TCP với mô tả sau:

1 Chạy chương trình

2 Một màn hình đen hiện ra chữ “Waiting for a client…”

3 Mở CMD gõ lệnh: telnet <IP của máy> 9050

4 Tại màn hình telnet hiện chữ “Welcome to my test sever”

5 Tại màn hình chương trình hiện chữ “Connect with địa chỉ IP at port số hiệu cổng”

6 Vào màn hình telnet, gõ thông điệp tùy ý thì lập tức bên màn hình chương trình hiện y chang vậy

7 Đóng màn hình telnet

8 Màn hình chương trình hiện ra chữ “ Disconnect at địa chỉ IP” và chương trình đóng

lại

9 Xem hình mô tả

Trang 11

Gợi ý:

static void Main( string [] args)

{

int recv;

byte [] data = new byte [1024];

IPEndPoint ipep = new IPEndPoint ( IPAddress Any, 9050);

Socket newsock = new

Socket ( AddressFamily InterNetwork,

SocketType Stream, ProtocolType Tcp);

newsock.Bind(ipep);

newsock.Listen(10);

Console WriteLine("Waiting for a client ");

Socket client = newsock.Accept();

IPEndPoint clientep =

( IPEndPoint )client.RemoteEndPoint;

Console WriteLine("Connected with {0} at port {1}",

clientep.Address, clientep.Port);

string welcome = "Welcome to my test server";

data = Encoding ASCII.GetBytes(welcome);

client.Send(data, data.Length,

Trang 12

Viết chương trình gửi và nhận dữ liệu sử dụng TCP Client và TCP Listener

Tra cưu lý thuyết:

Bật telnet trong win 7: http://www.wikihow.com/Activate-Telnet-in-Windows-7

Trang 13

IPAddress:

https://msdn.microsoft.com/en-us/library/system.net.ipaddress(v=vs.110).aspx

IPEndpoint :

https://msdn.microsoft.com/en-us/library/system.net.ipendpoint(v=vs.110).aspx

Trang 14

private Stream stmReader = null;

private Stream stmWriter = null;

private void btn_open_Click(object sender, EventArgs e)

{

IPEndPoint ipe = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 100);

listen = new TcpListener(ipe);

Trang 15

listClient.Add(client);

//MessageBox.Show("Client Kết Nối Thành Công");

//tao 1 tuyen moi de nhan du lieu tu client khi co ket noi moi

t = new Thread(nhandulieu);

t.Start(client);

string s = "Chào mừng 11520010 " + " đã kết nối đến máy chủ" + "\r\n";

byte[] data = new byte[1024];

data = Encoding.UTF8.GetBytes(s);

client.Send(data, data.Length, SocketFlags.None);

// //nhan du lieu tu client

byte[] data = new byte[1024];

int recv = sock.Receive(data);

string s = Encoding.UTF8.GetString(data, 0, recv);

rtb_hienthi.Text += s + "\r\n";

rtb_hienthi.SelectionStart = rtb_hienthi.Text.Length;

rtb_hienthi.ScrollToCaret();

//tra du lieu ve cac client

byte[] data1 = new byte[1024];

data1 = Encoding.UTF8.GetBytes(s);

foreach (Socket i in listClient)

byte[] data = new byte[1024];

data = Encoding.UTF8.GetBytes("Server : "+txt_chat.Text);

foreach (Socket i in listClient)

{

i.Send(data, data.Length, SocketFlags.None);

} rtb_hienthi.Text +="Server : "+ txt_chat.Text + "\r\n";

Trang 16

// BinaryWriter Writer = null;

// string Name = "book.txt";

//byte[] data = new byte[1024];

//data = Encoding.UTF8.GetBytes("Server : Send"+txtFileName.Text);

//foreach (Socket i in listClient)

//{

// i.Send(data, data.Length, SocketFlags.None);

//}

//OpenFileDialog fileDialog = new OpenFileDialog();

//if (fileDialog.ShowDialog() == DialogResult.OK)

Trang 17

private void button1_Click(object sender, EventArgs e)

{

IPEndPoint ipe = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 100);

listen = new TcpListener(ipe);

listen.Start();

//MessageBox.Show("Đang Chờ Kết Nối Từ Client");

t = new Thread(ketnoi);

Trang 18

string name = Dns.GetHostName();

IPHostEntry entry = Dns.GetHostEntry(name);

IPAddress[] addr = entry.AddressList;

StreamReader sr = new StreamReader(txtFileName.Text);

TcpClient tcpClient = new TcpClient();

tcpClient.Connect(new IPEndPoint(IPAddress.Parse(GetIP()), 8085));

byte[] buffer = new byte[1500];

Trang 20

IPEndPoint ipe = new IPEndPoint(IPAddress.Parse(txt_ip.Text), 100);

client = new Socket(AddressFamily.InterNetwork, SocketType.Stream,

ProtocolType.Tcp);

client.Connect(ipe);

//MessageBox.Show("Đã Kết Nối Đến Server");

byte[] data = new byte[1024];

int recv = client.Receive(data);

rtb_hienthi.Text = Encoding.UTF8.GetString(data, 0, recv);

truyen = new Thread(new ThreadStart(nhandulieu));

byte[] data = new byte[1024*50000];

int recv = client.Receive(data);

string s = Encoding.UTF8.GetString(data, 0, recv);

Trang 21

byte[] data = new byte[1024];

data = Encoding.UTF8.GetBytes("11520010" + " : " + txt_chat.Text);

client.Send(data, data.Length, SocketFlags.None);

//private Stream stmReader = null;

//private NetworkStream nwkStream = null;

//private Stream stmWriter = null;

//private TcpClient tcpClient = null;

//bool SaveData(byte[] Data)

//{

// BinaryWriter Writer = null;

// string Name = "book.txt";

Trang 22

// //lay het du lieu trong file

// byte[] data = new byte[1024 * 50000];

// int recv = client.Receive(data);

// string s = Encoding.UTF8.GetString(data, 0, recv);

Ngày đăng: 30/10/2015, 15:22

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w