using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Net;
using System.Threading;
namespace mytcpchat
{
public partial class Form1 : Form
{
Socket c;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
public void Client(IPEndPoint ServerIPEP)
{
try
{
c = new Socket(ServerIPEP.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
c.Connect((EndPoint)ServerIPEP);
c.Send(System.Text.Encoding.Default.GetBytes("这是一个测试消息"));
byte[] data = new byte[2048];
int rect = c.Receive(data);
byte[] chat = new byte[rect];
Buffer.BlockCopy(data, 0, chat, 0, rect);
MessageBox.Show(System.Text.Encoding.Default.GetString(chat));
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void button1_Click(object sender, EventArgs e)
{
Client(new IPEndPoint(IPAddress.Parse("220.194.57.122"), 5566));
}
}
}
服务端例子:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Net;
using System.Threading;
namespace mytcpserver
{
public partial class Form1 : Form
{
Socket s;
IPEndPoint ServerIPEP;
public Form1()
{
InitializeComponent();
}
public void Server(int port)
{
ServerIPEP = new IPEndPoint(IPAddress.Any, port);
s = new Socket(ServerIPEP.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
s.Bind((EndPoint)ServerIPEP);
s.Listen(10);
while (true)
{
Socket uc = s.Accept();
byte[] data = new byte[2048] ;
int rect = uc.Receive(data);
byte[] chat = new byte[rect] ;
Buffer.BlockCopy(data, 0, chat, 0, rect);
MessageBox.Show("接收到来及客户端的消息"+uc.RemoteEndPoint.ToString()+System.Text.Encoding.Default.GetString(chat));
uc.Send(chat);
}
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
Server(5566);
}
}
}
说明:socket端口需要指向在路由器映射的端口
转载来源:http://topic.csdn.net/u/20090605/16/3FE7D4B8-1C0F-4B0A-B389-DDAE58B7477C.html
分享到:
相关推荐
注意,这里得到的是外网IP,如果网络未连接,则返回的是内网IP。 在Java中,可以使用`InetAddress`类来获取IP地址: ```java import java.net.InetAddress; import java.net.UnknownHostException; public class ...
具体而言,外网用户需要在路由器上配置端口映射,将特定端口指向内部服务器的IP地址;同时,服务器端需配置相应的域名,以便于外网客户端的识别和访问。 ### 涂鸦与多媒体功能集成 除了基本的文本聊天,这款工具还...
除了上述基本概念外,Socket编程还涉及许多高级主题,例如HMAC(哈希消息认证码),这是一种用于数据完整性验证的安全机制。在网络安全领域,HMAC常用于实现Challenge/Response认证机制,确保通信双方的身份真实有效...
- `#include<WinSock2.h>`:Windows Socket API的头文件,提供了用于网络通信的功能。 - `#include<iostream>`:用于输入输出操作的标准库。 - `#pragma comment(lib,"WS2_32")`:链接器指令,告诉编译器链接到`...
除了上述两个函数外,MTK SOCKET API 还包含了多个其他重要的 Socket 相关函数,例如: - **`soc_socket`**:创建一个新的 Socket。 - **`soc_bind`**:绑定 Socket 到特定端口。 - **`soc_listen`**:设置 Socket ...
8.4 广域网输出 75 8.5 IP源站选路选项 76 8.5.1 宽松的源站选路的traceroute 程序示例 78 8.5.2 严格的源站选路的traceroute 程序示例 79 8.5.3 宽松的源站选路traceroute程序 的往返路由 80 8.6 小结 81 第9章 IP...
sockfd是客户端创建的套接字描述符,servaddr指向服务器的地址结构,包含服务器的IP和端口信息,addrlen是该结构的长度。成功连接后,客户端和服务器就可以通过套接字进行数据传输。 int send(int sockfd, const ...
由于路由器的外口和ISP之间占据了2个IP地址,剩下的可用IP地址为4个。 - 题目中提到使用202.112.68.41和255.255.255.252作为新的掩码,这意味着每个子网包含4个地址,减去网络地址和广播地址,实际可用的IP地址是2...
除了Socket API外,Java还提供了URL和URLConnection类来处理HTTP和其他URL协议的网络通信。URL表示统一资源定位符,可以用来访问互联网上的各种资源。URLConnection类是URL的子类,它允许我们打开到URL指向的资源的...
- **Socket:**在Win32中,Socket是一个指向特定传输提供者的句柄。它不同于文件描述符,而是具有独立的数据类型SOCKET。 - **Socket类型:** - **流式套接字 (SOCK_STREAM):**提供一种可靠的、面向连接的服务,...
1. **流式套接字(SOCK_STREAM)**:这种类型的Socket提供了面向连接的服务,即TCP/IP协议,确保了数据的可靠传输。例如,Web浏览器与Web服务器之间的通信就是基于TCP/IP的流式套接字。 2. **数据报套接字(SOCK_...
8.4 广域网输出 75 8.5 IP源站选路选项 76 8.5.1 宽松的源站选路的traceroute 程序示例 78 8.5.2 严格的源站选路的traceroute 程序示例 79 8.5.3 宽松的源站选路traceroute程序 的往返路由 80 8.6 小结 81 第9章 IP...
- **服务端**:等待客户端连接并响应请求的一方,通常会绑定到特定的IP地址和端口上。 - **工作流程**: - 服务端程序先启动,并绑定到指定的端口进行监听。 - 当客户端程序发送连接请求时,服务端接收该请求并...
- `level`:指定选项所在的协议层,如SOL_SOCKET(通用套接字选项)、IPPROTO_IP(IP选项)或IPPROTO_TCP(TCP选项)。 - `optname`:需要获取的选项名称。 - `optval`:指向接收选项值的缓冲区。 - `optlen`:入口...
- **telnet**:除了作为远程登录工具外,telnet还可以用于测试服务端程序是否正常工作。例如,如果服务端在8888端口监听,则可通过执行`telnet localhost 8888`来检查服务状态。 **1.3 TCP/UDP 协议介绍** - **TCP...
除了IP层的重组外,`libnids`还提供了TCP流重组的功能,即能够追踪TCP连接中的数据流。这对于分析会话级别的网络活动非常重要。 开发者可以通过定义一个类型为`void tcp_callback(struct tcp_stream *ns, void **...
"WSK"可能是"WinSock"的缩写,WinSock是Windows操作系统上的网络编程接口,用于实现TCP/IP协议栈。 2. **ChatClnt.exe** - 这是聊天客户端的可执行文件,用户可以直接运行来启动聊天应用。 3. **frmChatClnt.frm**...
`s`是套接字描述符,`name`是指向包含服务器地址信息的结构体的指针,`namelen`是该结构体的长度。 - **Bind函数**: - `int bind(int sockfd, const struct sockaddr *myaddr, socklen_t addrlen)`:将套接字与...
8.4 广域网输出 75 8.5 IP源站选路选项 76 8.5.1 宽松的源站选路的traceroute 程序示例 78 8.5.2 严格的源站选路的traceroute 程序示例 79 8.5.3 宽松的源站选路traceroute程序 的往返路由 80 8.6 小结 81 第9章 IP...