社区
网络及通讯开发
帖子详情
关于ServerSocket的问题
alen35532119
2006-10-13 11:44:53
请问如何在未建立连接的情况下,用ServerSocket向客户端发数据包?已经知道客户端的IP地址和端口号了.
...全文
229
8
打赏
收藏
关于ServerSocket的问题
请问如何在未建立连接的情况下,用ServerSocket向客户端发数据包?已经知道客户端的IP地址和端口号了.
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
quiton
2006-10-28
打赏
举报
回复
客户端:
#include <Winsock2.h>
#include <stdio.h>
void main()
{
//加载套接字库
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 2, 2 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
return;
}
if ( LOBYTE( wsaData.wVersion ) != 2 ||
HIBYTE( wsaData.wVersion ) != 2 ) {
WSACleanup( );
return;
}
//创建套接字
SOCKET sockClient = socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
addrSrv.sin_family = AF_INET;
addrSrv.sin_port=htons(6000);
//向服务器发出连接请求
connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
//接收数据
char recvBuf[100];
recv(sockClient,recvBuf,100,0);
printf("%s\n",recvBuf);
//发送数据
send(sockClient,"This is lisi",strlen("This is lisi")+1,0);
//关闭套接字
closesocket(sockClient);
WSACleanup();
}
quiton
2006-10-28
打赏
举报
回复
服务器端:
#include <Winsock2.h>
#include <stdio.h>
void main()
{
//加载套接字库
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 2, 2 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
return;
}
if ( LOBYTE( wsaData.wVersion ) != 2 ||
HIBYTE( wsaData.wVersion ) != 2 ) {
WSACleanup( );
return;
}
//创建用于监听的套接字
SOCKET sockSrv = socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(6000);
//绑定套接字
bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
//将套接字设为监听模式,准备接受客户端请求
printf("-------\n");
printf("正在监听");
listen(sockSrv,5);
SOCKADDR_IN addrClient;
int len = sizeof(SOCKADDR);
while(1)
{
//等待客户请求的到来
SOCKET sockConn = accept(sockSrv,(SOCKADDR*)&addrClient,&len);
char sendBuf[100];
sprintf(sendBuf,"Weclome %s to http://www.fudan.edu.cn",inet_ntoa(addrClient.sin_addr));
printf("%s\n",sendBuf);
//printf("111");
//发送数据
send(sockConn,sendBuf,strlen(sendBuf)+1,0);
//接收数据
char recvBuf[100];
recv(sockConn,recvBuf,100,0);
//打印接受到的数据
printf("%s\n",recvBuf);
//关闭套接字
closesocket(sockConn);
}
}
wz
2006-10-28
打赏
举报
回复
mark
Andrionda
2006-10-16
打赏
举报
回复
CLS_Socket::CLS_Socket()
{
m_iSocket=-1;
m_iStatus=SS_UNUSED;
m_iSocketError=0;
#ifdef _WIN32
WSADATA wsaData;
if(!g_iSockCount)
{
if (WSAStartup(0x202, &wsaData) == SOCKET_ERROR)
WSACleanup();
}
g_iSockCount++;
#endif
}
//发送数据
int CLS_Socket::SendData(void *pData, int iMaxLen)
{
int iRet, iLen, i;
char *p;
i=0;
iLen=0;
p=(char *)pData;
while(iLen<iMaxLen)
{
iRet=send(m_iSocket, p, iMaxLen-iLen, 0);
if(iRet<0)
{
#ifdef _WIN32
m_iSocketError=GetLastError();
if(m_iSocketError==WSAEWOULDBLOCK)
iRet=0;
else
{
CloseSocket();
return -1;
}
#else
m_iSocketError=errno;
if(m_iSocketError==EWOULDBLOCK||m_iSocketError==EINTR)
iRet=0;
else
{
CloseSocket();
return -1;
}
#endif
}
m_iSocketError=0;
iLen+=iRet;
if(iRet==0)
{
i++;
if(i==MAX_TRY_SOCK)
{
CloseSocket();
return -2;
}
#ifdef _WIN32
Sleep(SOCK_SLEEP);
#else
usleep(SOCK_SLEEP);
#endif
}
p+=iRet;
}
return iLen;
}
楼主参考一下
铖邑
2006-10-13
打赏
举报
回复
一定要先建立连接之后才能发送数据。ServerSocket不支持服务器主动连接客户端。可以用socket api编程实现。
alen35532119
2006-10-13
打赏
举报
回复
假如我的IP地址是192.168.1.1,端口是80,发送的数据是BUF,长度是LEN,该怎么用SOCKET API?
do2008
2006-10-13
打赏
举报
回复
原则:TCP在没有建立连接的情况下,是不能发送数据包的.
你说>>已经知道客户端的IP地址和端口号了.
那就向这个ip、端口连接,连接成功后,再发送数据
alen35532119
2006-10-13
打赏
举报
回复
那用socket api怎么写呢?
android Sockte、
ServerSocket
阻塞,不同步
问题
从昨天搞到了现在,一直有
问题
,开始以为是线程通信
问题
,测试后发现不是,走了好多弯路。用两个真机模拟的,有时候没有LogCat,也不知道原因。 有一次发现提示read(),readline(),查了一下readLine()函数,原来是没有数据时,readLine()一直阻塞,直到接收数据。 但是在另一端也是处于阻塞状态。 使用这个函数socket.shutdownOutput(); 半关闭
android中通过
ServerSocket
创建端口
问题
============
问题
描述============ 在Activity中通过new
ServerSocket
(9090)创建了一个服务端口,为何通过netstat命令查看时该端口并没有打开? 然后在客户端无论如何也连接不上,这肯定的 代码: server=new
ServerSocket
(12345); System....
ServerSocket
关闭端口
问题
ServerSocket
打开了一个端口,如何关闭他呢? 现在要实现的是两个类. 第一个类: StartService 打开端口开始监听,一直从事于服务 第二个类:StopService 关闭端口. 第一个类比较容易实现,但第二个类怎么实现呢? ...
记录
serverSocket
socket 输入,输出流,关闭顺序,阻塞,PrintWriter的一些
问题
.
关于socket.getOutputStream() 的一些
问题
, OutputStream的flush是一个空方法,所以需要另一个实现了Flush的流来包装一下 这里为什么使用PrintWriter,而不使用BufferedWriter 原因是在接收方使用BufferedReader 的readLine,而BufferedWriter.write并不会自动换行,所以会导致读取阻塞,需要手动换...
Java中的
ServerSocket
出现的
问题
,求解
//通话服务器端 import java.net.*; import java.io.*; import java.lang.*; public class myserver { public static void main(String[] args) { //服务器套节字
ServerSocket
server; //客
网络及通讯开发
1,317
社区成员
8,874
社区内容
发帖
与我相关
我的任务
网络及通讯开发
C++ Builder 网络及通讯开发
复制链接
扫一扫
分享
社区描述
C++ Builder 网络及通讯开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章