在博客園里也算有二個多月了,在這里我學到了很多東西,也想把自己學到的東西分享給大家,說到網絡編程其實自己也是沒學到什么高深的東西,只是個人興趣粗略的看了一下,一路都是自己摸索過來的。說得不好請大家不要在意,畢竟還沒有大學畢業,老師也沒有講到這門課程。這完全是個人理解。
【說到他的原理我覺得他有點像文件的讀寫操作】
【發送內容】當我們要保存文字的內容時,我們首先是聲明一個filestream,然后通過他的write()方法把內容寫到文本里面去。
基於p2p,內容的發送也一樣,有點像文本的寫入,而不同的是,這里用到NetworkStream網絡工作流這一東西,然后再通過StreamWriter的write方法把內容寫到指定的ip主機上。而使用
NetworkStream時,要先實例化TcpClient對象【TcpClient client = new TcpClient(Dns.GetHostName(), 888)】他有點像filestream構造函數里面的路徑這一參數,第一個參數為主機名,第二個參數為端口號
TcpClient client = new TcpClient(Dns.GetHostName(), 888);//實例化Tcpclient
NetworkStream netstream = client.GetStream();//獲取網絡工作流
StreamWriter wstream = new StreamWriter(netstream, Encoding.Default);//實例化寫入流
wstream.Write(“內容”);
【接收內容】接收內容時,要在一個線程上,對某一端口進行偵聽。偵聽接受到來自發送方的請求,然后讀取數據,最后再把數據給接受方
TcpListener tcpListener = new TcpListener(888);//指定對某一端口創建偵聽
tcpListener.Start();//開始偵聽
TcpClient tclient = tcpListener.AcceptTcpClient(); //接受連接請求
NetworkStream nstream = tclient.GetStream(); //獲取數據流
byte[] mbyte = new byte[1024]; //建立緩存
int i = nstream.Read(mbyte, 0, mbyte.Length); //將數據流寫入緩存
string message = Encoding.Default.GetString(mbyte,0,i);
MessageBox.Show(message);
好了,你們對比一下內容的發送和接收是不是與文本文件的讀寫像相似。
再符上一個較完整的硬代碼(對與某一主機通信,自己改一下ip就可以了,這里用的是用一主機進行通信)

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Threading;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
string message = "";//內容
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
Thread td = new Thread(new ThreadStart(this.liste));
td.Start();
}
private void button1_Click(object sender, EventArgs e)//發送內容
{
try
{
TcpClient client = new TcpClient(Dns.GetHostName(), 888);//實例化Tcpclient
NetworkStream netstream = client.GetStream();//獲取網絡工作流
StreamWriter wstream = new StreamWriter(netstream, Encoding.Default);//實例化寫入流
wstream.Write(textBox1.Text);//將字符寫入流
//wstream.Flush();
//wstream.Close();
//client.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void liste()//偵聽內容
{
try
{
TcpListener tcpListener = new TcpListener(888);//指定對某一端口創建偵聽
tcpListener.Start();//開始偵聽
TcpClient tclient = tcpListener.AcceptTcpClient(); //接受連接請求,中單位
NetworkStream nstream = tclient.GetStream(); //獲取數據流
byte[] mbyte = new byte[1024]; //建立緩存
int i = nstream.Read(mbyte, 0, mbyte.Length); //將數據流寫入緩存
message = Encoding.Default.GetString(mbyte,0,i);
}
catch (Exception exp)
{
MessageBox.Show(exp.Message);
}
}
private void button2_Click(object sender, EventArgs e)//顯內容
{
MessageBox.Show(message);
}
}
}
