通过Socket套接字和NetWorkStream流进行网络传输
2007-12-30 13:43
519 查看
通过Socket套接字和NetWorkStream流进行网络传输,通过NetWork流来发出链接的要求字符串得到Google主页网站的源代码,利用Socket套接字来链接Google的服务器发送请求和接收数据完成网络传输功能,主要利用了Dns类获取IPAddress来建立链接,以后还有讲到利用TCP和UDP进行通信在封装了Socket类的基础上能够更容易的实现网络的通信。
源代码如下:using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Net;
using System.Net.Sockets;
namespace NetPortConsole
{
class Program
{
static void Main(string[] args)
{
string server;
IPAddress[] hostadd;
ShowIPAddressAll(out server, out hostadd);
Socket s = Connect(hostadd);
NetworkStream ns = new NetworkStream(s, FileAccess.ReadWrite);
byte[] request = Request(server, s, ns);
//利用套接字发送
s.Send(request, request.Length, SocketFlags.None);
Receive(s);
Console.ReadLine();
}
private static void Receive(Socket s)
{
int bytes;
byte[] RecBytes = new byte[256];
while ((bytes = s.Receive(RecBytes, RecBytes.Length, SocketFlags.None)) > 0){
Console.WriteLine(Encoding.Unicode.GetString(RecBytes, 0, bytes));
}
}
private static byte[] Request(string server, Socket s, NetworkStream ns){
//需要这样的格式
string opStr = "GET/HTTP/1.1 /r/n Host:" + server + "/r/nConnection:Close/r/n/r/n";
byte[] request = Encoding.Unicode.GetBytes(opStr);
ns.Write(request, 0, request.Length);
int nextByte;
while ((nextByte = ns.ReadByte()) != -1){
Console.Write((char)nextByte);
}
return request;
}
private static Socket Connect(IPAddress[] hostadd){
IPEndPoint iep = new IPEndPoint(hostadd[0], 80);
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
s.Connect(iep);
if (!s.Connected){Console.WriteLine("Unable to Connect to host");}
return s;
}
private static void ShowIPAddressAll(out string server, out IPAddress[] hostadd){
server = "www.google.com";
hostadd = (Dns.GetHostEntry(server)).AddressList;
Console.WriteLine("Ip Address for {0} are:", server);
for (int i = 0; i < hostadd.Length; i++){Console.WriteLine(hostadd[i].ToString());}
}
}
}
源代码如下:using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Net;
using System.Net.Sockets;
namespace NetPortConsole
{
class Program
{
static void Main(string[] args)
{
string server;
IPAddress[] hostadd;
ShowIPAddressAll(out server, out hostadd);
Socket s = Connect(hostadd);
NetworkStream ns = new NetworkStream(s, FileAccess.ReadWrite);
byte[] request = Request(server, s, ns);
//利用套接字发送
s.Send(request, request.Length, SocketFlags.None);
Receive(s);
Console.ReadLine();
}
private static void Receive(Socket s)
{
int bytes;
byte[] RecBytes = new byte[256];
while ((bytes = s.Receive(RecBytes, RecBytes.Length, SocketFlags.None)) > 0){
Console.WriteLine(Encoding.Unicode.GetString(RecBytes, 0, bytes));
}
}
private static byte[] Request(string server, Socket s, NetworkStream ns){
//需要这样的格式
string opStr = "GET/HTTP/1.1 /r/n Host:" + server + "/r/nConnection:Close/r/n/r/n";
byte[] request = Encoding.Unicode.GetBytes(opStr);
ns.Write(request, 0, request.Length);
int nextByte;
while ((nextByte = ns.ReadByte()) != -1){
Console.Write((char)nextByte);
}
return request;
}
private static Socket Connect(IPAddress[] hostadd){
IPEndPoint iep = new IPEndPoint(hostadd[0], 80);
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
s.Connect(iep);
if (!s.Connected){Console.WriteLine("Unable to Connect to host");}
return s;
}
private static void ShowIPAddressAll(out string server, out IPAddress[] hostadd){
server = "www.google.com";
hostadd = (Dns.GetHostEntry(server)).AddressList;
Console.WriteLine("Ip Address for {0} are:", server);
for (int i = 0; i < hostadd.Length; i++){Console.WriteLine(hostadd[i].ToString());}
}
}
}
相关文章推荐
- C++解析JSON进行网络传输--一个通过JSON方式的socket传输
- C#通过Socket进行网络传输文件
- 通过套接字(socket)和UDP协议实现网络通信
- 局域网内通过UDP协议进行传输接受数据——AsyncUdpSocket
- QUdpSocket进行网络传输
- linux上使用ftp,sftp,rsync,scp,套接字 来通过网络传输文件
- [LWIP学习]--LWIP网络通信流程(物理层,链路层,网络层,传输层,socket套接字,应用层通信流程汇总)
- 【网络通信】Wince 和 PC 通过USB 用Socket 进行通信
- Uart2Socket:将PC的串口信息通过WiFi网络传输至安卓Android手机上
- .NET通过Socket实现平行主机之间网络通讯(含图片传输的Demo演示)
- C#.NET通过Socket实现平行主机之间网络通讯(含图片传输的Demo演示)
- C#.NET通过Socket实现平行主机之间网络通讯(含图片传输的Demo演示)
- C#.NET通过Socket实现平行主机之间网络通讯(含图片传输的Demo演示)
- 对通过网络传输的数据进行加密
- Android客户端与服务器端通过SOCKET连接进行读写(将JSON数据转化为字符串后传输)
- 【网络通信】Wince 和 PC 通过USB 用Socket 进行通信
- 通过套接字(socket)和UDP协议实现网络通信
- Unity——通过byte字节流进行网络传输,如何将一个类转换为一个byte字节流,再从byte字节流转换为一个类
- 当mysql中指定的socket路径改变时如何通过ODBC进行访问?
- android socket 网络数据传输