最基本的SOCKET代码

时间:2022-05-19 13:12:18 阅读: 最新文章 文档下载
说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。
最基本的SOCKET代码 2008-08-18 22:52

今天为自己的小东西做了个基础,就是实验下SOCKET编程,好为将来网络传数据做准备。看了N本书,发现讲SOCKET链接的都是自称一派,而且有些书讲的很乱,我晕啊。但是看这些书还是有些帮助的,因为可以筛选一下共通点,总结一下,然后自己就可以写出来了。

首先要做的事建立SOCKET,要建立之前,我们需要用IPEndPoint来指出服务器IP和开放的端口号。这里有个关键的问题就是端口号。尽量不要用那些比较经典的端口,比如80啥的,这是我遇到的第一个问题。不能重复使用,所以选择比较偏僻的端口比较保险,不然又莫名其妙的报错了。建立好SOCKET后用循环语句侦听端口,看有没有客户端访问进来。有的话,就要新建一个连接SOCKET对象,调用accept()方法,使得连接被允许,然后就是传数据啦。。。其实很简单,所有的数据以字节数组形式传送,所以发送方要对字符串进行编码,用到byte[] bytr=Encoding.ASCII.GetBytes(string.ToArray) 这里的string你定义的字符串,即你想传的。接收方则要预先定义一个字节数组,用来存放你要接受的数据,然后调用receive方法。客户端的其他部分和服务器类似,其实关键是通过SOCKET建立起来链接那个部分,即制定IPEndPoint那要搞清楚客户端和服务器端各是干什么的,该定义些什么就行。简单的代码如下: 服务器:

using System;

using System.Collections.Generic; using System.Text; using System.Net;

using System.Net.Sockets;

namespace GameServer {

class Program {

static void Main(string[] args) {

Socket theConn;

IPAddress serverIp = IPAddress.Parse("192.168.1.102"); string Port = "6600"; Socket serverSocket = new

Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

IPEndPoint serverIpEnd = new IPEndPoint(serverIp, Int32.Parse(Port));

serverSocket.Bind(serverIpEnd); serverSocket.Listen(100);


while (true) {

theConn = serverSocket.Accept(); byte[] receive = new byte[1024];

int i = theConn.Receive(receive, 0, theConn.Available, SocketFlags.None);

string id = Encoding.ASCII.GetString(receive, 0, i); Console.Write(id); theConn.Close(); } } } }

客户端:

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;

using System.Net.Sockets; using System.Threading;

namespace GameClient {

public partial class Form1 : Form {

public Form1() {

InitializeComponent(); }

private void button1_Click(object sender, EventArgs e) {

IPAddress serverIp = IPAddress.Parse("192.168.1.102"); string Port = "6600";

IPEndPoint serverhost = new IPEndPoint(serverIp, Int32.Parse(Port));

Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);


try {

client.Connect(serverhost); } catch {

MessageBox.Show("链接失败"); return; }

string id = textBox_id.Text; string pas = textBox_pas.Text;

byte[] byteId = Encoding.ASCII.GetBytes(id.ToCharArray()); //byte[] bytePas =

Encoding.ASCII.GetBytes(pas.ToCharArray());

client.Send(byteId, 0, byteId.Length, SocketFlags.None); //client.Send(bytePas, 0, bytePas.Length, SocketFlags.None);

client.Close(); } } }

好多Try,catch没加,只是试验。能把数据传到服务器了,这样就可以让服务器从数据库里调数据了,然后再返回给客户端,这样就可以做用户验证类似的活动了,而且游戏的数据也可以这样传,我现在是这么想的,不知道真正的大游戏怎么传的。。。。我没做过。先随便试下。




本文来源:https://www.wddqw.com/doc/c748ec46336c1eb91a375d3a.html