简单的Soket通信

今天碰见一个Case说要占掉一个端口再运行。那好,写个Socket让他一直通信,也就占用端口了:

TCP

 

ContractedBlock.gif ExpandedBlockStart.gif 代码
 
   
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Threading;

namespace ConsoleApplication1.SocketTest
{
class SocketTCP
{
private static void Server()
{
int recv;
byte [] data = new byte [ 1024 ];
IPEndPoint SerIP
= new IPEndPoint(IPAddress.Any, 8888 );
Socket serSock
= new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
serSock.Bind(SerIP);
serSock.Listen(
5 );

Console.WriteLine(
" Waiting the client..... " );

Socket cliSock
= serSock.Accept();
IPEndPoint CliIP
= cliSock.RemoteEndPoint as IPEndPoint;
Console.WriteLine(
" connect with client: " + CliIP.Address + " at port: " + CliIP.Port);
string welcome = " welcome here! " ;

data
= Encoding.ASCII.GetBytes(welcome);
cliSock.Send(data, data.Length, SocketFlags.None);
// 发送信息
while ( true )
{
// 用死循环来不断的从客户端获取信息
data = new byte [ 1024 ];
recv
= cliSock.Receive(data);
Console.WriteLine(
" recv= " + recv);
if (recv == 0 ) // 当信息长度为0,说明客户端连接断开
break ;
Console.WriteLine(Encoding.ASCII.GetString(data,
0 , recv));
cliSock.Send(data, recv, SocketFlags.None);
}
Console.WriteLine(
" Disconnected from " + CliIP.Address);
cliSock.Close();
serSock.Close();
}

private static void client()
{
byte [] data = new byte [ 1024 ];
Socket Client
= new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint IP
= new IPEndPoint(IPAddress.Parse( " 172.18.6.249 " ), 8888 );
try
{
Client.Connect(IP);
}
catch (Exception e)
{
Console.WriteLine(
" unable to connect to server " );
Console.WriteLine(e.ToString());
return ;
}

int recv = Client.Receive(data);
string strdata = Encoding.ASCII.GetString(data, 0 , recv);
Console.WriteLine(strdata);
while ( true )
{
string input = Console.ReadLine();
if (input == " exit " )
break ;
Client.Send(Encoding.ASCII.GetBytes(input));
data
= new byte [ 1024 ];
recv
= Client.Receive(data);
strdata
= Encoding.ASCII.GetString(data, 0 , recv);
Console.WriteLine(strdata);
}
Console.WriteLine(
" disconnect from sercer " );
Client.Shutdown(SocketShutdown.Both);
Client.Close();

}
public static void Run()
{
Server();
new Thread(client).Start();
}
}
}

UDP

 

ContractedBlock.gif ExpandedBlockStart.gif 代码
 
   
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;

namespace ConsoleApplication1.SocketTest
{
class SockUDP
{
private static void client()
{
byte [] data = new byte [ 1024 ]; // 定义一个数组用来做数据的缓冲区
string input, stringData;
IPEndPoint ipep
= new IPEndPoint(IPAddress.Parse( " 127.0.0.1 " ), 9050 );
Socket server
= new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
string welcome = " Hello,are you there? " ;
data
= Encoding.ASCII.GetBytes(welcome);
server.SendTo(data, data.Length, SocketFlags.None, ipep);
// 将数据发送到指定的终结点

IPEndPoint sender
= new IPEndPoint(IPAddress.Any, 0 );
EndPoint Remote
= (EndPoint)sender;
data
= new byte [ 1024 ];
int recv = server.ReceiveFrom(data, ref Remote); // 接受来自服务器的数据

Console.WriteLine(
" Message received from{0}: " , Remote.ToString());
Console.WriteLine(Encoding.ASCII.GetString(data,
0 , recv));
while ( true ) // 读取数据
{
input
= Console.ReadLine(); // 从键盘读取数据
if (input == " text " ) // 结束标记
{
break ;
}
server.SendTo(Encoding.ASCII.GetBytes(input), Remote);
// 将数据发送到指定的终结点Remote
data = new byte [ 1024 ];
recv
= server.ReceiveFrom(data, ref Remote); // 从Remote接受数据
stringData = Encoding.ASCII.GetString(data, 0 , recv);
Console.WriteLine(stringData);
}
Console.WriteLine(
" Stopping client " );
server.Close();

}
private static void Server()
{
int recv;
byte [] data = new byte [ 1024 ];
IPEndPoint ipep
= new IPEndPoint(IPAddress.Any, 9050 ); // 定义一网络端点
Socket newsock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); // 定义一个Socket
newsock.Bind(ipep); // Socket与本地的一个终结点相关联
Console.WriteLine( " Waiting for a client.. " );

IPEndPoint sender
= new IPEndPoint(IPAddress.Any, 0 ); // 定义要发送的计算机的地址
EndPoint Remote = (EndPoint)(sender); //
recv = newsock.ReceiveFrom(data, ref Remote); // 接受数据
Console.WriteLine( " Message received from{0}: " , Remote.ToString());
Console.WriteLine(Encoding.ASCII.GetString(data,
0 , recv));

string welcome = " Welcome to my test server! " ;
data
= Encoding.ASCII.GetBytes(welcome);
newsock.SendTo(data, data.Length, SocketFlags.None, Remote);
while ( true )
{
data
= new byte [ 1024 ];
recv
= newsock.ReceiveFrom(data, ref Remote);
Console.WriteLine(Encoding.ASCII.GetString(data,
0 , recv));
newsock.SendTo(data, recv, SocketFlags.None, Remote);
}
}

public static void Run()
{
Server();
}
}
}

有时间的研究研究异步的了。。。

转载于:https://www.cnblogs.com/jimson/archive/2010/06/09/socket.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值