网络编程聊天室项目(编写聊天室程序)

http://www.itjxue.com  2023-02-02 01:41  来源:未知  点击次数: 

vb 网络编程

Dim S As String

Dim ss As String

Dim i As Integer

Dim recUser As String

Dim senUser As String

Dim senIP As String

sckServer(index).GetData S '接收信息到 s

If userState(index) = 0 Then '如果是刚进来,winsock尚未使用的话

senUser = Trim(S)

senIP = sckServer(index).RemoteHostIP

If InStr(1, senUser, "*") = 1 Then

senUser = Right(senUser, Len(senUser) - 1)

Else

If checkUserName(senUser) = 1 Then

Call SendToOne("SystemOrder:姓名重复,客户端退出重进!", index)

Exit Sub

End If

If checkUserIP(senIP) = 1 Then

Call SendToOne("SystemOrder:IP重复,客户端退出重进!", index)

Exit Sub

End If

End If

S = "~~~~~~欢迎 " senUser " 进入聊天室!~~~~~~~"

userState(index) = 1 '设置用户状态为正常在线

user(index) = senUser

userIP(index) = senIP

List1.AddItem user(index) '加入到在线列表

Combo1.AddItem user(index)

zxrs = zxrs + 1

Label1.Caption = " " zxrs "人在线"

Call SendToAllExcept("SystemOrder:addtolist" user(index) "038868", index)

For i = 0 To List1.ListCount - 1

ss = ss List1.List(i) "038868"

Next

Call SendToOne("SystemOrder:addtolist" ss, index)

End If

If InStr(1, S, "038868SendToOne") = 0 Then

Call SendToAll(S) '广播方式

Else

recUser = Left(S, InStr(1, S, "038868SendToOne") - 1)

S = Right(S, Len(S) - Len(recUser) - Len("038868SendToOne"))

Call SendToOne(S, FindSckIndex(recUser))

If user(index) recUser Then Call SendToOne(S, index)

End If

'将所发信息也写入服务器

Call AddToText1(S)

End Sub

这是我做的一个聊天程序.不过我也是从网上下的源程序.这段程序我没有改,如果你想要的话我可以给你发过去.QQ:170985401

呵呵.发到你邮箱了.查收吧.

毕业设计要求做个小型网络聊天室,据说要用java编写程序,可是我没学过这门语言对Java一窍不通。请高手帮

我跟你说吧

你查一下啊 socket 和serversocket编程 。。主要是用这两个类。。。建议你找java网络编程这本书 。。有源码的

速求用JAVA语言写聊天室的源代码

【ClientSocketDemo.java 客户端Java源代码】

import java.net.*;

import java.io.*;

public class ClientSocketDemo

{

//声明客户端Socket对象socket

Socket socket = null;

//声明客户器端数据输入输出流

DataInputStream in;

DataOutputStream out;

//声明字符串数组对象response,用于存储从服务器接收到的信息

String response[];

//执行过程中,没有参数时的构造方法,本地服务器在本地,取默认端口10745

public ClientSocketDemo()

{

try

{

//创建客户端socket,服务器地址取本地,端口号为10745

socket = new Socket("localhost",10745);

//创建客户端数据输入输出流,用于对服务器端发送或接收数据

in = new DataInputStream(socket.getInputStream());

out = new DataOutputStream(socket.getOutputStream());

//获取客户端地址及端口号

String ip = String.valueOf(socket.getLocalAddress());

String port = String.valueOf(socket.getLocalPort());

//向服务器发送数据

out.writeUTF("Hello Server.This connection is from client.");

out.writeUTF(ip);

out.writeUTF(port);

//从服务器接收数据

response = new String[3];

for (int i = 0; i response.length; i++)

{

response[i] = in.readUTF();

System.out.println(response[i]);

}

}

catch(UnknownHostException e){e.printStackTrace();}

catch(IOException e){e.printStackTrace();}

}

//执行过程中,有一个参数时的构造方法,参数指定服务器地址,取默认端口10745

public ClientSocketDemo(String hostname)

{

try

{

//创建客户端socket,hostname参数指定服务器地址,端口号为10745

socket = new Socket(hostname,10745);

in = new DataInputStream(socket.getInputStream());

out = new DataOutputStream(socket.getOutputStream());

String ip = String.valueOf(socket.getLocalAddress());

String port = String.valueOf(socket.getLocalPort());

out.writeUTF("Hello Server.This connection is from client.");

out.writeUTF(ip);

out.writeUTF(port);

response = new String[3];

for (int i = 0; i response.length; i++)

{

response[i] = in.readUTF();

System.out.println(response[i]);

}

}

catch(UnknownHostException e){e.printStackTrace();}

catch(IOException e){e.printStackTrace();}

}

//执行过程中,有两个个参数时的构造方法,第一个参数hostname指定服务器地址

//第一个参数serverPort指定服务器端口号

public ClientSocketDemo(String hostname,String serverPort)

{

try

{

socket = new Socket(hostname,Integer.parseInt(serverPort));

in = new DataInputStream(socket.getInputStream());

out = new DataOutputStream(socket.getOutputStream());

String ip = String.valueOf(socket.getLocalAddress());

String port = String.valueOf(socket.getLocalPort());

out.writeUTF("Hello Server.This connection is from client.");

out.writeUTF(ip);

out.writeUTF(port);

response = new String[3];

for (int i = 0; i response.length; i++)

{

response[i] = in.readUTF();

System.out.println(response[i]);

}

}

catch(UnknownHostException e){e.printStackTrace();}

catch(IOException e){e.printStackTrace();}

}

public static void main(String[] args)

{

String comd[] = args;

if(comd.length == 0)

{

System.out.println("Use localhost(127.0.0.1) and default port");

ClientSocketDemo demo = new ClientSocketDemo();

}

else if(comd.length == 1)

{

System.out.println("Use default port");

ClientSocketDemo demo = new ClientSocketDemo(args[0]);

}

else if(comd.length == 2)

{

System.out.println("Hostname and port are named by user");

ClientSocketDemo demo = new ClientSocketDemo(args[0],args[1]);

}

else System.out.println("ERROR");

}

}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

【ServerSocketDemo.java 服务器端Java源代码】

import java.net.*;

import java.io.*;

public class ServerSocketDemo

{

//声明ServerSocket类对象

ServerSocket serverSocket;

//声明并初始化服务器端监听端口号常量

public static final int PORT = 10745;

//声明服务器端数据输入输出流

DataInputStream in;

DataOutputStream out;

//声明InetAddress类对象ip,用于获取服务器地址及端口号等信息

InetAddress ip = null;

//声明字符串数组对象request,用于存储从客户端发送来的信息

String request[];

public ServerSocketDemo()

{

request = new String[3]; //初始化字符串数组

try

{

//获取本地服务器地址信息

ip = InetAddress.getLocalHost();

//以PORT为服务端口号,创建serverSocket对象以监听该端口上的连接

serverSocket = new ServerSocket(PORT);

//创建Socket类的对象socket,用于保存连接到服务器的客户端socket对象

Socket socket = serverSocket.accept();

System.out.println("This is server:"+String.valueOf(ip)+PORT);

//创建服务器端数据输入输出流,用于对客户端接收或发送数据

in = new DataInputStream(socket.getInputStream());

out = new DataOutputStream(socket.getOutputStream());

//接收客户端发送来的数据信息,并显示

request[0] = in.readUTF();

request[1] = in.readUTF();

request[2] = in.readUTF();

System.out.println("Received messages form client is:");

System.out.println(request[0]);

System.out.println(request[1]);

System.out.println(request[2]);

//向客户端发送数据

out.writeUTF("Hello client!");

out.writeUTF("Your ip is:"+request[1]);

out.writeUTF("Your port is:"+request[2]);

}

catch(IOException e){e.printStackTrace();}

}

public static void main(String[] args)

{

ServerSocketDemo demo = new ServerSocketDemo();

}

}

java 网络编程中 tcp连接问题。 例如编写聊天室 , c/s结构的c和s端都是不间断实现请求--响应 。

你的意思我差不多明白了,现在我跟你说下那个两个人猜拳的一个思路

服务端是可以查看客户端连接情况的

你可以在客户端弄一个Map 用服务端的IP 作为键 , 发送的消息作为值存放

客户端发送消息后就存放在Map里面

当服务端接收到两边客户端都有传入消息,就根据IP 取出值来比较

然后将结果返回给客户端

其实那个多人聊天,需要所有人发言后才会公布广播的,也可以按照这个思路去做

你好,请问网络编程聊天室程序运行后出错,服务器端显示 accept:invalid argument.这个问题你解决了吗?

这样的写法有点问题:1)服务器端既然采用了异步方式Accept,就没有必要再启线程2)估计allDone是一个ManualResetEvent。用ManualResetEvent的目的什么呢?服务器端采用异步Accept的代码其实很简单,也不需要ManualResetEvent同步 public class AppTCPServer { public AppTCPServer(string localIP, int port) { Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); EndPoint localEP = new IPEndPoint(IPAddress.Parse(localIP), port); socket.Bind(localEP); socket.Listen(100); socket.BeginAccept(AcceptAsync, socket); } private void AcceptAsync(IAsyncResult ar) { Socket socket = ar.AsyncState as Socket; try { Socket client = socket.EndAccept(ar); Console.WriteLine("客户端连接成功!客户端:{0}", client.RemoteEndPoint.ToString()); if (OnConnected != null) { OnConnected(this, new ClientConnectedEventArgs(client)); } } catch (Exception e) { Console.WriteLine("AcceptAsync发生异常,异常信息:\n{0}", e.Message); } finally { //继续异步Accept socket.BeginAccept(AcceptAsync, socket); } } //客户端连接后的事件 OnConnect public event EventHandler OnConnected; } /// /// 事件参数:接收客户端连接后的事件参数 /// public class ClientConnectedEventArgs : EventArgs { public ClientConnectedEventArgs(Socket clientSocket) { ClientSocket = clientSocket; } public Socket ClientSocket { get; private set; } } class Program { static void Main(string[] args) { AppTCPServer server = new AppTCPServer("127.0.0.01", 8000); server.OnConnected += server_OnConnected; Console.WriteLine("按任意键结束程序……"); Console.ReadKey(); } static void server_OnConnected(object sender, ClientConnectedEventArgs e) { Socket client = e.ClientSocket; string hello = "Hello from AppTCPServer"; client.Send(Encoding.Default.GetBytes(hello)); } } 客户端测试程序 class Program { static void Main(string[] args) { //模拟100个客户连接服务器 for (int i = 0; i 100; i++) { Socket socket = ConnectToServer("127.0.0.1", 8000); byte[] buffer = new byte[1024]; int bytesRecevied = socket.Receive(buffer, buffer.Length, SocketFlags.None); byte[] messageBytes = new byte[bytesRecevied]; Array.Copy(buffer, messageBytes, bytesRecevied); Console.WriteLine(Encoding.Default.GetString(messageBytes)); socket.Disconnect(false); socket.Close(); } Console.ReadKey(); static Socket ConnectToServer(string serverIP, int serverPort) { Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); EndPoint localEP = new IPEndPoint(IPAddress.Any, 0); socket.Bind(localEP); socket.Connect(new IPEndPoint(IPAddress.Parse(serverIP), serverPort)); return socket; } }

(责任编辑:IT教学网)

更多

推荐java认证文章