
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")
void main() {
// 初始化
WSADATA wsaData
int iResult = WSAStartup( MAKEWORD(2,2), &wsaData )
if ( iResult != NO_ERROR )
printf("Error at WSAStartup()\n")
// 建立socket
SOCKET server
server = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP )
if ( server == INVALID_SOCKET ) {
printf( "Error at socket(): %ld\n", WSAGetLastError() )
WSACleanup()
return
}
// 绑定socket
sockaddr_in service
service.sin_family = AF_INET
service.sin_addr.s_addr = inet_addr( "127.0.0.1" )
service.sin_port = htons( 27015 )
if ( bind( server, (SOCKADDR*) &service, sizeof(service) ) == SOCKET_ERROR ) {
printf( "bind() failed.\n" )
closesocket(server)
return
}
// 监听 socket
if ( listen( server, 1 ) == SOCKET_ERROR )
printf( "Error listening on socket.\n")
// 接受连接
SOCKET AcceptSocket
printf( "Waiting for a client to connect...\n" )
while (1) {
AcceptSocket = SOCKET_ERROR
while ( AcceptSocket == SOCKET_ERROR ) {
AcceptSocket = accept( server, NULL, NULL )
}
printf( "Client Connected.\n")
server = AcceptSocket
break
}
// 发送接受数据
int bytesSent
int bytesRecv = SOCKET_ERROR
char sendbuf[32] = "Server: Sending Data."
char recvbuf[32] = ""
bytesRecv = recv( server, recvbuf, 32, 0 )
printf( "Bytes Recv: %ld\n", bytesRecv )
bytesSent = send( server, sendbuf, strlen(sendbuf), 0 )
printf( "Bytes Sent: %ld\n", bytesSent )
return
}
SERVER的
using Systemusing System.Collections.Generic
using System.Net
using System.Net.Sockets
using System.Threading
using System.Text
using System.IO
class Server
{
Socket _listenSocket
Dictionary<string, ClientProcess> _clients
public Server(int port)
{
_clients = new Dictionary<string, ClientProcess>()
_listenSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
IPEndPoint lep = new IPEndPoint(IPAddress.Any, port)
_listenSocket.Bind(lep)
}
public void Start()
{
_listenSocket.Listen(5)
for ( )
{
Socket client = _listenSocket.Accept()
ClientProcess cp = new ClientProcess(this, client)
ThreadStart ts = new ThreadStart(cp.Process)
Thread t = new Thread(ts)
t.Start()
}
}
public void AddClient(string email, ClientProcess c)
{
lock (_clients)
{
if (!_clients.ContainsKey(email))
_clients.Add(email, c)
}
}
public void RemoveClient(string email)
{
lock (_clients)
{
if (_clients.ContainsKey(email))
_clients.Remove(email)
}
}
public void SendTo(string from, string email, string msg)
{
ClientProcess cp
lock(_clients) {
_clients.TryGetValue(email, out cp)
}
if (cp != null)
{
cp.Send(from, msg)
}
}
}
class ClientProcess
{
Server _serv
Socket _s
TcpClient _tc
StreamReader _sr
StreamWriter _sw
string email
public ClientProcess(Server serv, Socket s)
{
_serv = serv
_s = s
_tc = new TcpClient()
_tc.Client = _s
_sr = new StreamReader(_tc.GetStream())
_sw = new StreamWriter(_tc.GetStream())
}
public void Process()
{
try
{
email = _sr.ReadLine()
_serv.AddClient(email, this)
for ( )
{
string l = _sr.ReadLine()
int i = l.IndexOf(':')
if(i == -1)
continue
string em = l.Substring(0, i)
string msg = l.Substring(i + 1)
_serv.SendTo(email, em, msg)
}
}
catch
{
_serv.RemoveClient(email)
}
}
public void Send(string email, string msg)
{
_sw.WriteLine("{0}:{1}", email, msg)
_sw.Flush()
}
}
class Program
{
static void Main(string[] args)
{
Server s = new Server(12345)
s.Start()
}
}
协议是这样的:
1、发送和接收都是以行为单位的
2、客户端连接后发送的第一行数据是自己的邮箱
3、客户端之后发送的格式是: 对方邮箱 冒号 要发送的消息。冒号是英文半角冒号,邮箱和冒号间没有空格
首先需要在电脑上搭建服务器,关于网上好多按步骤安装apache,sql,phpmyadmin的方法复杂而且没有必要,这里推荐wamp这样的一个集成软件,安装非常简单,一路点击next,apache+sql+phpmyadmin的环境一键搭好。在百度中搜索Wamp下载,直接下载就行。下载完wamp进行安装,一路点击next,装在c:\wamp下,最后install完成.
在浏览器输入localhost,出现以下页面说明安装成功了。现在服务器和php环境算是搭好了。此时在桌面右下角任务栏中会有wamp的图标,点击会有下图显示,www是网站页面根目录,localhost是网站默认主页,点击phpmyadmin可以进入数据库管理界面.
现在网站只能在PC上显示,如何能把网站放到互联网上让朋友也欣赏一下。这时就需要一款叫花生壳的软件,提供动态的域名映射.
下载网址如下:http://hsk.oray.com/download/#type=windows|lan
下载完软件按步骤安装即可,这时候需要注册一下花生壳会员,注册时按网页提示的步骤即可,用身份z注册可以获得一个免费域名。用注册的账号密码登陆软件。会出现以下界面。这里的网址是申请的免费域名。
在域名上右键,选择新花生壳管理,填写应用名称,这个可以随便填,内网主机为本机内网的ip地址,这时需要查看以下,win+R在cmd中输入,ipconfig/all,
可以看到ipv4地址,填写即可。端口为80端口。
同时,现在需要设置一下路由器。在浏览器输入192.168.1.1。输入路由器用户名和密码,一般都为admin。进入路由器界面。需要设置三个地方,首先是动态DNS,选择服务商为花生壳,填写用户名密码,验证保存。然后是转发规则中的虚拟服务器,添加新条目,端口80,ip地址为内网ip。最后是,DMZ主机,设置开启,ip为内网本机ip。
现在设置基本完成,这时就可以测试了。注意,要把防火墙关闭,否则外网还是访问不了本机的网站。在控制面板中把防火墙关闭。现在可以写一段html代码,命名为index.html(注意此时先把index.php放到别的文件夹)放入wamp\www目录中,来测试访问。
最后,在浏览器输入花生壳域名,看看是不是就能访问了。同时也可以把自域名发送给朋友,让他们帮测试一下。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)